在bash命令的替换行中,美元符号是什么意思;更名为;

在bash命令的替换行中,美元符号是什么意思;更名为;,bash,rename,dollar-sign,Bash,Rename,Dollar Sign,我在阅读有关重命名的内容时,遇到了将文件扩展名从htm更改为html的示例: rename -v 's/\.htm$/\.html/' *.htm 上面写着:$表示字符串的结尾\.htm$表示它将匹配.htm,但不匹配.html 在这里使用$让我有点困惑。由于我们已经在命令行末尾指定了*.htm,重命名将只选择htm文件(而不是html)。那么为什么还需要使用$呢?换句话说,不使用$有什么不对?锚定$匹配源文件名的结尾,并且它仍然是正则表达式中所必需的,还应转义dot,否则abc.htm.ht

我在阅读有关重命名的内容时,遇到了将文件扩展名从htm更改为html的示例:

rename -v 's/\.htm$/\.html/' *.htm
上面写着:
$
表示字符串的结尾
\.htm$
表示它将匹配
.htm
,但不匹配
.html


在这里使用
$
让我有点困惑。由于我们已经在命令行末尾指定了
*.htm
重命名
将只选择htm文件(而不是html)。那么为什么还需要使用
$
呢?换句话说,不使用
$
有什么不对?

锚定
$
匹配源文件名的结尾,并且它仍然是正则表达式中所必需的,还应转义dot,否则
abc.htm.htm
将重命名为
abc.html.htm
,而不是
abc.htm.html

正确的命令是:

rename -v 's/\.htm$/.html/' *.htm

我必须对此进行测试以确认,但可能没有锚定
$
,该锚定将在文件名中找到第一个出现的
.htm
,而不是扩展名(例如,因此
foo.htm.htm
将变成
foo.html.htm
,而不是
foo.htm.html
),因为它是一个正则表达式。查一查,;如果您想立即正确地学习它,请期待整个周末的时间。Unix系统上最初的
rename
命令不允许使用正则表达式,但在过去几年中,许多发行版已经用Larry Wall的
rename
Perl脚本取代了它。如果幸运的话,您的系统可能有原始的
rename
命令作为
rename.ul
提供。然后您就不必处理正则表达式了。现在它看起来可能是一样的,但最初的问题是
rename-v's/.htm$/.html/'*.htm
,在任何情况下,我的观点是为什么即使文件名模式为
*.htm