【发布时间】:2017-04-08 22:40:16
【问题描述】:
假设我有一个包含几十年子目录的目录:
$ ls -d /very/long/path/*/
adir1/ adir2/ b2dir/ b3dir/ k101/ k102/ k103/ k104/ k220/ k221/ k222/ etc
我想循环选择将根据用户给出的答案“动态”定义的目录,其中包含通配符。例如(不起作用的代码):
$ cat my_script.sh
DATADIR="/very/long/path"
echo -n "Select dirs to involve: "
read dirlist
for DIR in "$dirlist"; do
echo $DATADIR/$DIR
[do stuff]
...
done
需要的是以下内容:
$ ./my_script.sh
Select dirs to involve: a* k10?
/very/long/path/adir1
/very/long/path/adir2
/very/long/path/k101
/very/long/path/k102
/very/long/path/k103
/very/long/path/k104
有什么提示吗?
【问题讨论】:
-
您的问题来自这样一个事实,即您的通配表达式在引号内,而引号(单引号或双引号)会阻止通配的发生。然而,您不能简单地删除引号,因为这可能会打开
$dirlist扩展以进行分词,这是您不希望发生的(即包含空格的路径)。