【发布时间】:2016-12-10 04:00:57
【问题描述】:
我试图在我的 bash 脚本中列出位于某个目录的特定子目录中的所有文件。这是我尝试过的。
root_dir="/home/shaf/data/"
sub_dirs_prefixes=('ab' 'bp' 'cd' 'cn' 'll' 'mr' 'mb' 'nb' 'nh' 'nw' 'oh' 'st' 'wh')
ls "$root_dir"{$(IFS=,; echo "${sub_dirs_prefixes[*]}")}"rrc/"
请注意,我不想扩展存储在 $root_dir 中的值,因为它可能包含空格,但我确实想扩展 {} 中包含的子路径,它是 $sub_dirs_prefixes 的内容的逗号分隔字符串。我将子目录前缀存储在数组变量 $sub_dirs_prefixes 中,因为稍后我必须将它们用于其他用途。
我收到以下错误:
ls: cannot access /home/shaf/data/{ab,bp,cd,cn,ll,mr,mb,nb,nh,nw,oh,st,wh}rrc/
如果我复制错误消息中的路径并从命令行运行ls,它会显示列出的子目录的内容。
【问题讨论】:
-
大括号扩展发生在变量扩展之前,因此不可能一次性完成。您可以
eval处理所有安全/可靠性问题,但最好使用循环或数组替换。
标签: bash