2013-04-09 221 views
3

我正在写一个剧本bash它使用参数扩展这样的贯穿了几声:兼容性

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

我需要一些箱子可能有运行此脚本旧版本的bash已安装。我知道它在bash 4.1+的作品,但我想知道它是多么便携?

  • 这种结构会在老版本的bash中失效吗?如果是这样,哪个版本?
  • 我应该考虑更便携的构造吗?
+1

这两个构造都符合POSIX标准,所以它们就像您可能获得的那样便携。 – chepner 2013-04-09 19:37:03

回答

4

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

编辑:如果你是偏执和bash的合规性的不信任:

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

2.05a发布于2001年〜。

+0

很好的解释和大力支持。谢谢一堆! – nullrevolution 2013-04-09 21:14:15

2

这应该不会在任何版本的bash中失败,因为它真的是一个korn shell构造。只要你确定你将使用bash(任何版本)你的罚款。