两次Bash命令替换

时间:2016-07-27 23:19:24

标签: linux bash variables command-substitution

我的目录 a1..a5 b1..b5 c1..c5 。在每个目录中,我有两个文件 a1 b1 c1

do mkdir /tmp/{a,b}$d; touch /tmp/{a,b,c}$d/{a,b,c}1; done;

我想在以“a”开头的目录中获取所有以'a'或'b'开头的文件。我可以用:

DIRS=`ls -1 -d /tmp/{a,b}*/a*`
echo ${DIRS}

并获得:

  

/ tmp / a1 / a1 / tmp / a2 / a1 / tmp / a3 / a1 / tmp / a4 / a1 / tmp / a5 / a1   / tmp / b1 / a1 / tmp / b2 / a1 / tmp / b3 / a1 / tmp / b4 / a1 / tmp / b5 / a1

现在,我将使用一个名为DATA的变量来存储目录,然后获取文件:

DATA="/tmp/{a,b}*"
echo ${DATA}
DIRS=`ls -1 -d ${DATA}/a*`
echo ${DIRS}

在输出中,DATA内容正常( / tmp / {a,b} * ),但是我收到以下错误:

  

ls:无法访问/ tmp / {a,b} * / a *:没有此类文件或目录

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

我解决了这个问题,但我找不到任何有关我之前尝试失败的原因的参考资料。

DATA="/tmp/{a,b}*"
echo ${DATA}
DIRS=`eval "ls -1 -d ${DATA}/a*"`
echo ${DIRS}

<强>输出:

  

/ tmp / a1 / a1 / tmp / a2 / a1 / tmp / a3 / a1 / tmp / a4 / a1 / tmp / a5 / a1 / tmp / b1 / a1   / tmp / b2 / a1 / tmp / b3 / a1 / tmp / b4 / a1 / tmp / b5 / a1