小编val*_*rus的帖子

为什么这个在 for 循环中复制文件的命令在 bash 中有效,但在 zsh 中无效?

我试图将一堆具有相同名称但位于不同子目录中的文件复制到一个目录中,根据原始文件的路径将名称更改为名称。我使用了一个 for 循环,它在 bash 中执行我的意图,但在 zsh 中表现得非常奇怪。

命令(为了易读性添加了换行符):

for f in */Flavors/*/stuff1/filename.txt;
    do l=$(echo $f | cut -d'/' --output-delimiter '' -f1,3);
    dest=/stuff2/${l}.utf8.txt;
    echo $f $dest;
    cp -v -- $f $dest;
done
Run Code Online (Sandbox Code Playgroud)

在 zsh 中输出。我打算输出文件名是例如“EnglishAU.utf8.txt”,但它们只是“English”、“French”和“Spanish”。请注意,echo循环显示$dest包含正确的路径,然后cp使用错误的路径!

English/Flavors/AU/stuff1/filename.txt /stuff2/EnglishAU.utf8.txt
`English/Flavors/AU/stuff1/filename.txt' -> `/stuff2/English'
English/Flavors/UK/stuff1/filename.txt /stuff2/EnglishUK.utf8.txt
`English/Flavors/UK/stuff1/filename.txt' -> `/stuff2/English'
English/Flavors/US/stuff1/filename.txt /stuff2/EnglishUS.utf8.txt
`English/Flavors/US/stuff1/filename.txt' -> `/stuff2/English'
French/Flavors/CA/stuff1/filename.txt /stuff2/FrenchCA.utf8.txt
`French/Flavors/CA/stuff1/filename.txt' -> `/stuff2/French'
French/Flavors/FR/stuff1/filename.txt /stuff2/FrenchFR.utf8.txt
`French/Flavors/FR/stuff1/filename.txt' -> `/stuff2/French'
Spanish/Flavors/ES/stuff1/filename.txt /stuff2/SpanishES.utf8.txt
`Spanish/Flavors/ES/stuff1/filename.txt' -> `/stuff2/Spanish'
Spanish/Flavors/OT/stuff1/filename.txt /stuff2/SpanishOT.utf8.txt
`Spanish/Flavors/OT/stuff1/filename.txt' -> `/stuff2/Spanish'
Run Code Online (Sandbox Code Playgroud)

如上所述,这在 bash 中按预期工作。zsh 在做什么?

bash zsh for

3
推荐指数
1
解决办法
1200
查看次数

标签 统计

bash ×1

for ×1

zsh ×1