String bash truncate字符串在命令行上工作,但在脚本中不工作

String bash truncate字符串在命令行上工作,但在脚本中不工作,string,bash,console,trim,String,Bash,Console,Trim,我正在尝试从字符串的末尾删除所有出现的字符 我提出的测试脚本是: #!/bin/bash Input="/tmp/blah/bloh/////////////" Desired="/tmp/blah/bloh" cut='/' result=${Input%%+(${cut})} echo " Input: ${Input}" echo "Expected result: ${Desired}" echo " Result: ${result}" ech

我正在尝试从字符串的末尾删除所有出现的字符

我提出的测试脚本是:

#!/bin/bash
Input="/tmp/blah/bloh/////////////"

Desired="/tmp/blah/bloh"

cut='/'

result=${Input%%+(${cut})}

echo "          Input: ${Input}"
echo "Expected result: ${Desired}"
echo "         Result: ${result}"
echo "---------------------------------------"
echo -n "        Outcome: "

[ "${Desired}" = "${result}" ] && echo "Success!" || echo "Fail!"
通过bash/tmp/test.sh运行此脚本将提供以下输出:

          Input: /tmp/blah/bloh/////////////
Expected result: /tmp/blah/bloh
         Result: /tmp/blah/bloh/////////////
---------------------------------------
        Outcome: Fail!
但是,如果我将整个内容复制并粘贴到控制台中,就会得到/tmp/blah/blah的预期结果

这是怎么回事?

+(${cut})
是一个扩展模式,默认情况下,
bash
无法识别。您需要首先启用
extglob
选项

$ shopt -s extglob
$ Input="/tmp/blah/bloh/////////////"
$ cut='/'
$ echo "${Input%%+(${cut})}"
/tmp/blah/bloh
您可能通过
.bashrc
.bash\u profile
配置文件在交互式shell中启用了
extglob
,但这两个文件都不用于脚本启动的非交互式shell。

替换
\/bin/bash
#/bin/bash-i
;)