两次Bash命令替换
Twice Bash 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: cannot access /tmp/{a,b}*/a*: No such file or directory
知道为什么会这样吗?
我解决了这个问题,但是我找不到任何关于我之前尝试失败的原因的参考。
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
我有目录 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: cannot access /tmp/{a,b}*/a*: No such file or directory
知道为什么会这样吗?
我解决了这个问题,但是我找不到任何关于我之前尝试失败的原因的参考。
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