0

次のシェルスクリプトがあります

cat test.sh    

j=00000001;
k=00000005;
l=$(echo {00000001..00000005}.jpg);
m=$(echo {$j..$k}.jpg);
ls $l
ls $m

ここに出力があります

 ./test.sh 
00000001.jpg  00000002.jpg  00000003.jpg  00000004.jpg  00000005.jpg
ls: cannot access {00000001..00000005}.jpg: No such file or directory

私の疑問は、「なぜ ls $m が機能しないのか」です。そしてそれを機能させる方法は?

前もって感謝します。リン

4

1 に答える 1

1

シーケンス展開は、リテラル番号に対してのみ発生します。変数の展開は、シーケンス展開の後に発生します。

シーケンス式は {x..y} の形式を取ります。ここで、x と y は整数または単一の文字です。 整数が指定された場合、式は x と y の間の各数値に展開されます。文字が指定されると、式は x と y の間の辞書式に各文字に展開されます。x と y の両方が同じ型でなければならないことに注意してください。

ブレース展開は他の展開の前に実行され、他の展開に特有の文字は結果に保持されます。それは厳密にテキストです。Bash は、展開のコンテキストまたは中括弧内のテキストに構文解釈を適用しません。

あなたの場合、evalを使用できます:

m=`eval echo {$j..$k}.jpg`
于 2013-10-16T04:29:00.973 に答える