1から100までの数字のリストを印刷したいです。次の for ループを使用します。
number=100
for num in {1..$number}
do
echo $num
done
コマンドを実行すると、1から100までの数値リストの代わりに{1..100}のみが印刷されます。
答え1
はい、中かっこ拡張がパラメータ拡張の前に発生するためです。zsh
orなどの他のシェルを使用するksh93
か、代替構文を使用してください。
標準(POSIX)sh構文
i=1
while [ "$i" -le "$number" ]; do
echo "$i"
i=$(($i + 1))
done
Kshスタイルfor ((...))
for ((i=1;i<=number;i++)); do
echo "$i"
done
使用eval
(推奨しない)
eval '
for i in {1..'"$number"'}; do
echo "$i"
done
'
seq
使用可能なシステムでGNUコマンドを使用する
unset -v IFS # restore IFS to default
for i in $(seq "$number"); do
echo "$i"
done
(このコマンドは新しいコマンドを分岐して実行し、シェルがパイプから出力を読み取る必要があるため効率が悪くなります。)
シェルでループを避けてください。
シェルスクリプトでループを使用することは、通常、ループが正しく実行されないことを示します。
ほとんどの場合、コードを別の方法で書くことができます。
答え2
forループも必要ありませんseq
。以下を使用してください。
$ seq 100
はい
印刷された最初の10個の数字は次のとおりです。
$ seq 100 | head -10
1
2
3
4
5
6
7
8
9
10
答え3
以下を使用できます。
for (( num=1; num <= 100; num++ ))
do
echo $num
done
答え4
中括弧拡張は、リテラル整数または単一文字でのみ機能します。変数が拡張される前に発生するため、変数内では使用できません。