bash模式匹配运算符##在脚本中不起作用

时间:2019-04-18 03:33:35

标签: bash

以《学习重击壳》(O'Reilly)一书为例,

pathname="/home/cam/book/long.file.name"
echo ${pathname##/*/}
echo ${pathname#/*/}

预期结果应为long.file.name,因为##删除了与模式/*/匹配的最长前缀。

但是,当我将这三行放在脚本文件中并在bash中运行时,没有显示结果。但是,一两行输入即可显示预期结果。

我想知道可执行脚本中是否存在与此操作符##的使用有关的任何设置。

(在流浪汉中使用ubuntu \ trusty64。)

谢谢。

更新

该代码可以正常工作,另一部分代码会影响结果。

另外

${path##*/}是等效于basename命令的更好选择。

1 个答案:

答案 0 :(得分:1)

尽管echo ${pathname##/*/}对我来说很好,但恕我直言,您应该尝试遵循。

echo ${pathname##*/}

这意味着您是在说正则表达式的帮助下使用bash来删除/替换从/开始到最后一次出现NULL的所有内容。