我一直在使用一个shell脚本,它曾经做过这样的事情:
output=$(ls -R /logs/{abc,cde}/"$((${date}/100))"/*/out*${date}* | grep -v "Random" )
echo $output在运行此命令时,我通常会在相关位置获取带有abc或cde的文件。您可以忽略其他变量,如日期等
但是,当我将脚本修改为以abc、cde作为命令行参数,而不是在脚本中进行硬编码时,它停止工作。我将命令更改为:
output=$(ls -R /logs/{${list}}/"$((${date}/100))"/*/out*${date}* | grep -v "Random" )其中list为abc,cde
我尝试了很多不同的引号组合,但似乎不起作用。有没有人能帮我找出正确的语法,让它正常工作
发布于 2019-12-23 16:44:51
它不起作用,因为展开顺序阻止了它。
展开顺序为:花括号展开、波浪线展开、参数展开、变量展开
您可以使用eval来解决这个问题,但是应该完全避免使用eval。
也许在这里使用find会更好。
find /logs -name 'abc/...' -o -name 'cde/...' 即使对于变量,这也是有效的
或者使用正则表达式逻辑。
find /logs/ -regex '/logs/\(abc\|cde\).*'发布于 2019-12-23 17:18:48
试试这个
output=ls -R /logs/${ARR[@]/"$((${date}/100))"/*/out*${date}* | grep -v "Random"
https://stackoverflow.com/questions/59452200
复制相似问题