在以下情况下basename "$x"
和的输出echo "${x##*/}"
没有区别:
$ x=xxx/yyy ; basename "$x" ; echo "${x##*/}"
yyy
yyy
在哪些情况下(如果有的话)basename "$x"
和的输出echo "${x##*/}"
不同?
在以下情况下basename "$x"
和的输出echo "${x##*/}"
没有区别:
$ x=xxx/yyy ; basename "$x" ; echo "${x##*/}"
yyy
yyy
在哪些情况下(如果有的话)basename "$x"
和的输出echo "${x##*/}"
不同?
的规范
basename
包括以下内容:${x##*/}
根据此规范,您的扩展将得到:因此,它基本上完成了 规范中步骤 5
basename
应该做的事情。您询问的是basename "$x"
(而不是basename "$x" suffix
),因此步骤 6 无关紧要。这意味着basename "$x"
和之间的(几乎*)所有差异都echo "${x##*/}"
必须来自步骤 1 到 4。示例:* 我写“几乎”是因为还有其他一些可能性。其中包括:
basename
可以将参数解释为选项,也echo
可能支持某些选项(POSIX 不允许;但 GNUecho
允许,echo
多个 shell 中的内置命令也允许)。这导致了它们自身类型的差异:请参阅(双破折号/双连字符)是什么
--
意思?和为什么printf
比 更好echo
?echo
通常是 shell 内置的,但basename
通常是一个外部程序;所以如果你破坏了你的$PATH
……