Bash参数扩展仅适用于交互式shell,但不适用于脚本

时间:2016-10-21 15:20:46

标签: bash trim

在用户控制台中,我有bash

$ echo $SHELL
/bin/bash
$ bash --version
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)

我在test.sh文件中有代码:

$ cat test.sh
aaa='---aa-aa---'
echo "${aaa}"
echo 'does not work...'
# trim "-"
echo ${aaa/+(-)}
echo ${aaa%%+(-)}
echo 'works for one symbol...'
echo ${aaa%-}
echo ${aaa/-}

最后两行效果不错但以前的行。

$ bash test.sh
---aa-aa---
does not work...
---aa-aa---
---aa-aa---
works for one symbol...
---aa-aa--
--aa-aa---

同时,如果您尝试制作此控制台,则可以正常工作:

$ aaa='---aa-aa---'
$ echo ${aaa/+(-)}
aa-aa---
$ echo ${aaa%%+(-)}
---aa-aa

那么,为什么它不能在脚本中运行?

1 个答案:

答案 0 :(得分:3)

您似乎在交互式shell中启用了shopt -s extglob,这会启用扩展的通配。这不是默认行为,需要在脚本中明确启用。有关详细信息,请参阅extended pattern matching in the bash hackers wiki