bash 截断字符串适用于命令行但不适用于脚本
bash truncate string Works on commandline but not in script
我正在尝试从字符串末尾截断所有出现的字符。
我想出的测试脚本是:
#!/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_profile
配置文件在交互式 shell 中启用了 extglob
,但这两个文件都没有用于非交互式 shell 由您的脚本启动。
我正在尝试从字符串末尾截断所有出现的字符。
我想出的测试脚本是:
#!/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_profile
配置文件在交互式 shell 中启用了 extglob
,但这两个文件都没有用于非交互式 shell 由您的脚本启动。