为什么不't${PATH//:/\n}在新行上输出每个路径

  • 本文关键字:新行 路径 输出 PATH bash
  • 更新时间 :
  • 英文 :


假设

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 -en转换为换行符:

echo -e "${PATH//:/\n}"

bash运算符${var//pattern/string/ }是一个变量扩展,它将变量var的值作为输入,然后用string替换pattern的所有匹配项。

在您的示例中,目标是用n替换每个分隔符:,并用echo -e作为换行符打印它们。

但为了使其工作,有必要将加倍以保护它,因此正确的命令是

echo -e "${PATH//:/\n}"

有关更多信息,请参阅参考手册中的段落${parameter/pattern/string}

最新更新