bash参数扩展/字符串操作的兼容性



我正在编写一个bash脚本,它使用像这样的参数展开几次:

${pathvariable%/*}
${pathvariable##*/}

我需要在一些可能安装了较旧版本bash的机器上运行这个脚本。我知道它在bash 4.1+工作,但我想知道它有多便携?

  • 这种构造在旧版本的bash中会失败吗?如果有,是哪个版本?
  • 是否有更便携的构造我应该考虑?

它们是在POSIX中定义的(见这里),所以你应该是安全的。

EDIT:如果你是偏执狂,不相信bash的兼容性:

$ ./bash --posix
$ echo ${BASH_VERSION}
2.05a.0(1)-release
$ foo="foo/bar"
$ echo "${foo%/*}"
foo
$ echo "${foo##*/}"
bar

2.05a发布于~2001年。

这在任何版本的bash中都不应该失败,因为它实际上是一个korn shell结构。只要您确定您将使用bash(任何版本),您就可以。

最新更新