0

次の行のコードは機能していません。ディレクトリを反復処理していません。

input={20132802,20132802}
for i in $(ls -1 /home/$input/*s.log)
do
...
done

しかし、ループで入力を提供するとうまくいきます。

for i in $(ls -1 /home/{20132802,20132802}/*s.log)
do
...
done

助けてください。

4

2 に答える 2

0

ブレース展開は、他の展開の前に実行されるため、変数では使用できません。からman bash:

ブレース展開は他の展開よりも前に実行され、他の展開に特有の文字は結果に保持されます。それは厳密にテキストです。Bash は、展開のコンテキストまたは中括弧内のテキストに構文解釈を適用しません。パラメーター展開との競合を避けるため、文字列 '${' はブレース展開の対象とは見なされません。

evalただし、この制限を克服するために使用できます。

input={20132802,20132802}
for i in $(eval ls -1 /home/$input/*s.log)
do
...
done

必読:eval悪です

于 2013-03-05T10:52:38.413 に答える
-1

i は for ループのインデックスであり、$input ('$i'input) を記述するときに $i が使用されると思われるため、$input の代わりに ${input} を記述してみてください。

于 2013-03-05T10:33:02.370 に答える