forループ条件内では、コマンド置換は機能しません。

forループ条件内では、コマンド置換は機能しません。

for (( a=1;a<=$(wc -l sedtest1);a++ ));do echo $a; done

私にエラーが発生します:

-bash: ((: a<=21 sedtest1: syntax error in expression (error token is "sedtest1")

ベストアンサー1

の出力はwc -l sedtest1次のようになります。

21 sedtest1

a <= 21 sedtest1そうすれば、そのテストはそれほど無効なものになります。

これは、wcループが繰り返されるたびにコマンドが実行されることを意味します。各反復の間にファイルの内容がsedtest1変更されない場合は、まずループ外の変数に行番号を格納することをお勧めします。

n=$(wc -l < sedtest1) # using redirection avoids the output containing the filename
for ((a = 0; a < n; a++)); do echo "$a"; done

私はまた、あなたがループを使用して非効率的でシェル以外の方法でテキストを処理しようとしていると疑います。読みたいかもしれませんシェルループを使用してテキストを処理するのはなぜ悪い習慣と見なされますか?。このように、ファイルの各行を繰り返すことは正しいアプローチではありません。

おすすめ記事