【问题标题】:Misunderstanding in how curly braces work in shell对花括号如何在 shell 中工作的误解
【发布时间】:2021-01-08 17:04:05
【问题描述】:

我在这里有一点误解。所以,我执行这些命令:

mkdir Week\ {1..13}
touch {1..13}.txt

mv {1..13}.txt Week\ {1..13}

我的意图是将 1.txt 移至第 1 周,将 2.txt 移至第 2 周,依此类推,但所有文件最终都位于“第 13 周”目录中,我无法弄清楚它是如何工作的。如果可能的话,谁能给我解释一下?

【问题讨论】:

    标签: bash mv curly-braces


    【解决方案1】:

    花括号在“大括号扩展”中扩展(请参阅man bash)。所以你的最后一行被扩展为

     mv 1.txt 2.txt 3.txt ... 13.txt Week\ 1 Week\ 2 ... Week\ 13
    

    如果你查看man mv,你会看到

      mv [OPTION]... [-T] SOURCE DEST
      mv [OPTION]... SOURCE... DIRECTORY
      mv [OPTION]... -t DIRECTORY SOURCE...
    

    它没有列出类似的东西

    mv [OPTION] SOURCE1 DEST1 SOURCE2 DEST2
    

    您可以使用循环将文件分发到目录中:

    for n in {1..13} ; do
        mv "$n".txt "Week $n"
    done
    

    如果您没有对文件做任何其他事情而是创建它们,实际上您可以直接在循环中创建它们,因此您最初不需要在同一目录中创建它们:

    for n in {1..13} ; do
        mkdir "Week $n"
        touch "Week $n/$n.txt"
    done
    

    【讨论】:

      猜你喜欢
      • 2021-01-11
      • 2023-03-17
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2019-01-26
      • 1970-01-01
      相关资源
      最近更新 更多