テキストファイルの行を繰り返したいと思いますa.txt
。ファイルに6行がある場合は、次のようにできます。
for c in {1..6} ; do echo $c; done
印刷:
1
2
3
4
5
6
行数は次のように計算できます。
wc -l a.txt | cut -f1 -d' '
これは作る2852
wc
ここで、以下のように数をforループに置き換えようとすると、ループは機能しません。
for c in {1..$(wc -l ~/a.txt| cut -f1 -d' ')} ; do echo $c; done
1から2852までの数字を印刷する代わりに、次のものを印刷します。
{1..2852}
正しい数値順序を得るために、上記のループでサブシェルの使用法をどのように変更する必要がありますか?
(
bash --version
はい(Debian):
GNU bash, version 5.1.4(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2020 Free Software Foundation, Inc.
)
ベストアンサー1
バッシュはそうではなかったケシ変数を括弧内に入れる関数です。
var=$(wc -l ~/a.txt| cut -f1 -d' ')}
echo {0..$var}
ループを使用できます。
for ((i=0; i<var; i++)); do
echo "$i"
done
動作していても、以下は避けるべきです。
eval echo {0..$var}
eval
「悪」の一般的なスペルミスです。
バラよりhttp://mywiki.wooledge.org/BashFAQ/048