如何拆分bash命令?

时间:2016-02-01 12:07:45

标签: linux bash

我有以下命令

mkdir -p /tmp/{A,B,C,D}

以上命令工作正常,但不是以下作为bash考虑B,C和D作为不同的命令:

我想要以下内容:

mkdir -p /tmp/{A,
B,
C,
D}

1 个答案:

答案 0 :(得分:3)

正如评论中所指出的那样,你可以在换行符之前使用反斜杠来做到这一点,但是任何空格都会被认为是重要的,整个事情最终会变得相当难看。作为一种美学上更令人愉快的解决方法,您可以将目录名称放在一个数组中。

dirs=(
    a
    b
    c
    d
  )
mkdir -p "${dirs[@]/#//tmp/}"

构造"${array[@]/#/prefix)"再现array中的值,每个值前加prefix

但这是相对模糊的;除非您创建的真实目录名称非常冗长且繁琐,否则只需用手写出来就是我的建议。

如评论中所述,数组和{A,B,C,D}都是Bash结构,因此如果您调用sh而不是bash,则无法使用(即使shbash符号链接到php -v; Bash会注意到,并启用POSIX模式)。