【发布时间】:2017-03-25 15:56:41
【问题描述】:
我想在一个 for 循环中输入几个目录。我没有目录的完整名称,只有其中的一部分。
我想做一些你在终端上写的东西,比如cd *IncompleteDirName*
这是循环的 MVE:IncompleteDirName 是从文件 IncompleteDirNames 中获得的。
cont=1
sum=1
while read anotherFILE; do
IncompleteDirName=$(sed "${cont}q;d" IncompleteDirNames)
cd *"${IncompleteDirName}"*
# Do stuff
cd ..
cont=$((cont + sum))
done <anotherFILE
这不起作用,我不知道这是否与通配符未扩展或变量无法正常工作有关。
它向我抛出了这个错误消息:
*: 没有这样的文件或目录
我想这意味着星号没有按预期工作。它没有进入目录,并且有一个匹配每个模式的目录。无论如何,没有目录被输入。
这是IncompleteDirNames 文件的样子:
Alicante
Almeria
Andalucia
Avila
这是一列名称。
这些是上面IncompleteDirNames对应的目录名:
aa4fas_Alicante_com
mun_Almeria
comunidadde_Andalucia
ciuAvila
【问题讨论】:
-
“不工作”是什么意思?我无法准确理解这里发生了什么,因为这是一个实际上并没有运行的示例。子字符串在文件中,这些子字符串是目录名称的一部分,并且您想在每个目录中“做一些事情”,这些目录与位于
FILE的子字符串部分匹配?如果一个子字符串匹配多个目录怎么办?code和p-ca文件里面有什么? -
我确定没有多个目录匹配。我已经更正了代码。
-
您需要澄清什么不起作用。有一件事是肯定的:如果您的不完整名称可以匹配许多目录,并且您想在每个目录中执行某些操作,那么您需要一个循环。您还需要为没有目录匹配的情况做好准备,这在您的暂定代码中会导致“cd”命令失败,但不会阻止执行“Do stuff”部分。
-
感谢您的更新。还不清楚。您能否向我们展示
FILE中的内容以及IncompleteDirNames中的内容的样本?您是否尝试过,在cd行之前,与您 CD 相同的内容的echo,以确保您尝试更改为您打算更改的内容? -
@ghoti 是的,我有,
echoes 是不完整的目录名称,但以星号开头。