我正在尝试从字符串末尾切断所有出现的字符。
我想到的测试脚本是:
#!/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的预期结果
这是怎么回事?
答案 0 :(得分:3)
+(${cut})
是扩展模式,bash
默认不识别。您需要先启用extglob
选项。
$ shopt -s extglob
$ Input="/tmp/blah/bloh/////////////"
$ cut='/'
$ echo "${Input%%+(${cut})}"
/tmp/blah/bloh
您可能已通过extglob
或.bashrc
配置文件在交互式外壳程序中启用了.bash_profile
,但没有两个文件用于脚本启动的非交互式外壳程序。