首页 > 解决方案 > shell脚本中的问题,用变量替换显式字符串

问题描述

我一直在使用一个 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" )

列表在哪里abc,cde

我尝试了很多不同的引号组合等,但它似乎不起作用。有人可以帮助它正确工作的正确语法吗

标签: bashshellsh

解决方案


试试这个

  1. 将 abc 和 cde 分配给数组 ex - declare -a ARR=(abc cde)

  2. 将其分配给如下变量。

    输出=ls -R /logs/${ARR[@]/"$((${date}/100))"/*/out*${date}* | grep -v "Random"


推荐阅读