Bash 用变量替换显式字符串在shell脚本中出现问题
我一直在使用一个shell脚本,用于执行以下操作:Bash 用变量替换显式字符串在shell脚本中出现问题,bash,shell,sh,Bash,Shell,Sh,我一直在使用一个shell脚本,用于执行以下操作: output=$(ls -R /logs/{abc,cde}/"$((${date}/100))"/*/out*${date}* | grep -v "Random" ) echo $output 在运行这个命令时,我通常在相关位置使用abc或cde获取文件。您可以忽略其他变量,如日期等 但是,当我修改脚本,将abc、cde作为命令行参数而不是脚本中的硬编码时,它停止了工作。 我将命令更改为: output=$(ls -R /logs/{${
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" )
其中列表为abc、cde
我尝试了很多不同的引号组合等,但似乎不起作用。有人能帮我解释一下正确的语法吗?它不工作,因为扩展顺序阻止了它 展开顺序为:支撑展开;瓷砖扩展, 参数与变量展开 您可以使用
eval
来解决这个问题,但是应该避免使用eval
在这里使用find
可能更好
find /logs -name 'abc/...' -o -name 'cde/...'
这甚至适用于变量
或者使用正则表达式逻辑
find /logs/ -regex '/logs/\(abc\|cde\).*'
试试这个
ls-R/logs/${ARR[@]/“$((${date}/100))”/*/out*${date}*| grep-v“Random”
用
$list
代替$(list)
?(这不是一个需要执行的命令,它只是一个变量)@Dominique,但他使用了${list}
,好的,我试着同时使用$list和${list}。两者都不起作用。这回答了你的问题吗?@ShubhiAgarwal,Shubhi,你能在这里提到完整的要求吗?因为从来都不建议解析ls输出,我想在这里找到一些有用的东西,所以请用完整的细节编辑你的问题,然后让我们知道。这似乎是错误的,因为这涉及到/logs/abc/…
和into/cde/…
@ShubhiAgarwal:这解决了您的问题,请接受答案,这样其他用户就知道这个问题已经解决了,不再需要花费更多的精力来解决它。