以《学习重击壳》(O'Reilly)一书为例,
pathname="/home/cam/book/long.file.name"
echo ${pathname##/*/}
echo ${pathname#/*/}
预期结果应为long.file.name
,因为##
删除了与模式/*/
匹配的最长前缀。
但是,当我将这三行放在脚本文件中并在bash中运行时,没有显示结果。但是,一两行输入即可显示预期结果。
我想知道可执行脚本中是否存在与此操作符##
的使用有关的任何设置。
(在流浪汉中使用ubuntu \ trusty64。)
谢谢。
更新
该代码可以正常工作,另一部分代码会影响结果。
另外
${path##*/}
是等效于basename
命令的更好选择。
答案 0 :(得分:1)
尽管echo ${pathname##/*/}
对我来说很好,但恕我直言,您应该尝试遵循。
echo ${pathname##*/}
这意味着您是在说正则表达式的帮助下使用bash来删除/替换从/
开始到最后一次出现NULL的所有内容。