3

一度に1文字ずつファイルを読み取るスクリプトがあります。これは私が使用するスクリプトです

INPUT=/path/
while IFS= read -r -n1 char; do
    echo $char
done < "$INPUT"

それはうまく動作しますが、すべての文字を変数に格納する方法がわかりません

N$X=$char

ここで、X = カウントまたは文字、$char = 文字

どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

4

一般的に、 N1N2、 などの変数があり、別の変数のようにそれらにアクセスすることは非常に悪いことです。これに対する治療法は配列にあります。代わりに配列を使用して問題を解決する方法は次のとおりです。N$ii

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
于 2013-06-30T21:39:56.240 に答える
2

次のようなことができます。

X=0
while IFS= read -r -n1 char; do
    eval "N$X=\$char"
    X=`expr $X + 1`
done < "$INPUT"

ループの最後にX0X1X2、 などには、読み込まれたさまざまな文字が含まれます。

于 2013-06-30T19:18:50.210 に答える