bash截断字符串可在命令行上使用,但不能在脚本中使用

时间:2018-08-15 11:36:16

标签: 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}"
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的预期结果

这是怎么回事?

1 个答案:

答案 0 :(得分:3)

+(${cut})是扩展模式,bash默认不识别。您需要先启用extglob选项。

$ shopt -s extglob
$ Input="/tmp/blah/bloh/////////////"
$ cut='/'
$ echo "${Input%%+(${cut})}"
/tmp/blah/bloh

您可能已通过extglob.bashrc配置文件在交互式外壳程序中启用了.bash_profile,但没有两个文件用于脚本启动的非交互式外壳程序。