我正在处理这样一行代码:
mkdir -p "$DEST_ROOT_PATH/"{"$DEST_DIR1","$DEST_DIR2", ..., "$DEST_DIRN"}
这一行比较长,我想将其切割成适合80列的宽度。我尝试使用反斜杠转义换行符,但是空格对齐会破坏扩展:
$ echo "ha"{a,b,\
> c}
ha{a,b, c}
我正在处理这样一行代码:
mkdir -p "$DEST_ROOT_PATH/"{"$DEST_DIR1","$DEST_DIR2", ..., "$DEST_DIRN"}
这一行比较长,我想将其切割成适合80列的宽度。我尝试使用反斜杠转义换行符,但是空格对齐会破坏扩展:
$ echo "ha"{a,b,\
> c}
ha{a,b, c}
echo "ha"{a,b,\
> ` `c}
它打开一个没有任何内容的子shell,在扩展之前被处理,因此扩展只会看到一个空格。
非引用状态下的反斜杠‘\’是Bash中的转义字符。它保留接下来的字符的字面值,除了换行符。如果出现\newline对,且反斜杠本身未被引用,则将\newline视为行继续符(即从输入流中删除并有效地忽略)。
因此,当你说
something + \ + <new line> + another_thing
something + another_thing
在下一行加上反斜杠,然后从最开始开始写:
mkdir -p "$DEST_ROOT_PATH/"{"$DEST_DIR1",\
"$DEST_DIR2",\
...,\
"$DEST_DIRN"}
当你说:
$ echo "ha"{a,b\
> c}
ha{a,b c}
然后将箭头向上移动,您将看到执行的命令如下:
$ echo "ha"{a,b c}
所以只需说:
$ echo "ha"{a,b\
> c}
haa habc
当向上移动时,您将看到这个:
$ echo "ha"{a,b,c}
另一个例子:
$ cat touch_files.sh
touch X{1,\
2,3}
$ bash touch_files.sh
$ ls X*
X1 X2 X3
mkdir -p "$DEST_ROOT_PATH/"{"$DEST_DIR1","$DEST_DIR2"}
mkdir -p "$DEST_ROOT_PATH/"{"$DEST_DIR3","$DEST_DIR4"}
for d in \
"$DEST_DIR1" \
"$DEST_DIR2" \
... \
"$DEST_DIRn" \
;
do
mkdir -p "$DEST_ROOT_PATH/$d"
done