【发布时间】:2016-03-31 05:07:02
【问题描述】:
我正在尝试使用 bash 以模式 *{num1..num2}.txt 列出当前目录中的文件
我尝试过使用 bash 大括号功能
ls *{10..20}.txt
,这是有效的。但是,当我先设置变量 num1 和 num2 然后使用
num1=10
num2=20
ls a{${num1}..${num2}}.txt
,实际上失败了。我用bash -x调试,发现bash自动给字符串a{${num1}..${num2}}.txt加上单引号,很奇怪。
你有什么解决办法吗?
谢谢。
【问题讨论】:
-
尽可能忽略接受的答案。确实没有必要使用
eval(或者在可以避免的情况下是一个好主意)。如果您需要运行单个命令并将它们全部作为参数,则可以将这些条目与循环一起累积在一个数组中。 -
你的意思是下面的循环吗?
all=; for i in {10..20}; do all="$all $(ls *$i.nc)"; done; echo $all -
那个循环由于不同的原因是错误的。
all=(); for i in {10..20}; do all+=( *"$i.nc" ); done; echo "${all[@]}".
标签: bash