波纹管代码不起作用。它没有遍历目录。
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
请帮忙。
大括号扩展不能在变量中使用,因为它在任何其他扩展之前执行。来自man bash
:
大括号扩展在任何其他扩展之前执行,并且任何其他扩展的特殊字符都保留在结果中。它是严格的文本。Bash 不对扩展的上下文或大括号之间的文本应用任何句法解释。为避免与参数扩展发生冲突,字符串 '${' 不适合大括号扩展。
但是,您可以使用eval
来克服此限制:
input={20132802,20132802}
for i in $(eval ls -1 /home/$input/*s.log)
do
...
done
必读:eval
是邪恶的
尝试编写 ${input} 而不是 $input,因为 i 是 for 循环的索引,我猜在编写 $input ('$i'nput) 时使用了 $i。