私はbashスクリプトに初めてアクセスし、wc -c
コマンドをシミュレートするために次のスクリプトを作成しました。 (行末を計算しないことを知っています。)
#!/bin/bash
echo $1
len=0
cat $1 | while read line
do
let len+=${#line}
echo $len
done
echo $len
出力は次のとおりです。
xyz.sh
11
11
18
27
51
53
70
79
83
92
0
len
何度も何度も試しても変更が持続しないのはなぜですか?
答え1
これはwhile
、ループがサブシェルで実行されるために発生します。子シェルの変数の変更は親シェルには影響しません。
cat
いくつかのリダイレクトを実行して、パイプや不必要な使用を避けてください。
while read line
do
let len+=${#line}
echo $len
done < $1
これはサブシェルを必要としないため、変更は$len
親シェルに表示されます。