一度に1文字ずつファイルを読み取るスクリプトがあります。これは私が使用するスクリプトです
INPUT=/path/
while IFS= read -r -n1 char; do
echo $char
done < "$INPUT"
それはうまく動作しますが、すべての文字を変数に格納する方法がわかりません
N$X=$char
ここで、X = カウントまたは文字、$char = 文字
どんな助けでも大歓迎です。ありがとう!
一度に1文字ずつファイルを読み取るスクリプトがあります。これは私が使用するスクリプトです
INPUT=/path/
while IFS= read -r -n1 char; do
echo $char
done < "$INPUT"
それはうまく動作しますが、すべての文字を変数に格納する方法がわかりません
N$X=$char
ここで、X = カウントまたは文字、$char = 文字
どんな助けでも大歓迎です。ありがとう!
一般的に、 bashN1
にN2
、 などの変数があり、別の変数のようにそれらにアクセスすることは非常に悪いことです。これに対する治療法は配列にあります。代わりに配列を使用して問題を解決する方法は次のとおりです。N$i
i
n=()
i=0
while read -r -n1 n[i]; do
echo "Character $i is ${n[i]}"
((++i))
done < "$INPUT"
この時点で、配列に文字が含まれていますn
(すべてではありません)。k+1
でキャラクターにアクセスできます
${n[k]}
(配列インデックスは 0 から始まることに注意してください)。
別の可能性は、文字列内のすべてを丸呑みすることです。これは次のように簡単です。
string=$( < "$INPUT" )
k+1
でキャラクターにアクセスできます
${n:k:1}
( index で始まる長さ 1 の部分文字列を取りますk
)。すべての文字のループは、次のように実行できます。
for ((k=0;k<${#string};++k)); do
echo "Character $k is '${string:k:1}'"
done
次のようなことができます。
X=0
while IFS= read -r -n1 char; do
eval "N$X=\$char"
X=`expr $X + 1`
done < "$INPUT"
ループの最後にX0
、X1
、X2
、 などには、読み込まれたさまざまな文字が含まれます。