Bash 参数扩展仅在交互式 shell 中有效,但在脚本中无效

Kir*_*rby 1 bash trim

在用户控制台中我有bash

$ echo $SHELL
/bin/bash
$ bash --version
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

我在文件 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/-}
Run Code Online (Sandbox Code Playgroud)

最后两行工作正常,但前面的两行工作正常。

$ bash test.sh
---aa-aa---
does not work...
---aa-aa---
---aa-aa---
works for one symbol...
---aa-aa--
--aa-aa---
Run Code Online (Sandbox Code Playgroud)

同时,如果您尝试使该控制台正常工作:

$ aaa='---aa-aa---'
$ echo ${aaa/+(-)}
aa-aa---
$ echo ${aaa%%+(-)}
---aa-aa
Run Code Online (Sandbox Code Playgroud)

那么,为什么它在脚本中不起作用呢?

tri*_*eee 5

您似乎已经shopt -s extglob在交互式 shell 中启用了扩展通配符。这不是默认行为,需要在脚本中显式启用。有关详细信息,请参阅bash hackers wiki 中的扩展模式匹配