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

尝试编写 ${input} 而不是 $input,因为 i 是 for 循环的索引,我猜在编写 $input ('$i'nput) 时使用了 $i。

于 2013-03-05T10:33:02.370 回答