假设
PATH=/this/is/path1:/this/is/path2:/this/is/path3
为什么
echo "${PATH//:/n}" or echo -e "${PATH//:/n}"
不输出
this/is/path1
this/is/path2
this/is/path3
这是bash 4.4.20。
${var//<here>/<and here>}
中的内容用转义,这样您就可以编写
}
或/
。类似:
$ var=abc; echo "${var//b/}}"
a}c
n
不是特殊序列,所以它只是n
:
$ var=abc; echo "${var//b/n}"
anc
因此,使用"${PATH//:/n}"
,您只是将:
替换为n
。用实际的换行符替换:
:
echo "${PATH//:/$'n'}"
# or an actual actual newline
echo "${PATH//:/
}"
或者您似乎想用两个字符的序列n
替换它,然后使用echo -e
将n
转换为换行符:
echo -e "${PATH//:/\n}"
bash运算符${var//pattern/string/ }
是一个变量扩展,它将变量var
的值作为输入,然后用string
替换pattern
的所有匹配项。
在您的示例中,目标是用n
替换每个分隔符:
,并用echo -e
作为换行符打印它们。
但为了使其工作,有必要将加倍以保护它,因此正确的命令是
echo -e "${PATH//:/\n}"
有关更多信息,请参阅参考手册中的段落${parameter/pattern/string}
。