2014-03-25 50 views
0

有人可以解释echo "${PWD/#$HOME/~}"PWD评估为$HOME的情况下如何打印~。千万不要使用echo来阅读这种替换。这里发生了什么?使用shell脚本进行说明

回答

1

这不是echo这是你的车壳使Parameter Expansion using ${parameter/pattern/string} syntax

pattern被扩展为一个模式,就像文件名扩展 。参数被展开,模式 与其值的最长匹配被替换为字符串。如果模式以‘/’, 开头,则模式的所有匹配都将替换为字符串。通常只有 第一场比赛被替换。如果模式以‘#’开头,则它必须匹配 参数扩展值的开头。如果模式开始 与‘%’,它必须在参数的扩展值的末尾匹配。 如果字符串为空,模式的匹配被删除,并且/以下的 模式可能被省略。如果参数是‘@’‘*’,则会依次将替换 操作应用于每个位置参数,并且 扩展是结果列表。如果参数是以‘@’‘*’作为下标的数组变量 ,则替换操作将依次应用于该数组的每个成员 ,并且该扩展是由此产生的 列表。

doesn't look like POSIX supports it

在你的情况,如果它PWD ENVVAR它开始取代$HOME ENVVAR(不是字符串字面'$HOME')与~输出的值。

+0

您可以使用POSIX支持的'$ {PWD#$ HOME}'。它不会带你一路,但可以构建类似的东西,也许有一个临时变量。 – tripleee

+0

精美地解释@ J.F。塞巴斯蒂安。谢谢大家:) – mdsingh

+0

对于那些想阅读bash参数扩展的人来说,这里是一个很好的链接http://www.linuxjournal.com/content/bash-parameter-expansion – mdsingh