用单引号括住函数参数

用单引号括住函数参数

我编写了以下函数来递归重命名某些子目录中的文件:

rrename(){ find . -type f -name $1 -execdir mv {} $2 ';' }

当我这样调用它时,它工作正常:

rrename '*.md' renamed.md

然而,我宁愿不需要包含单引号,而是像这样调用它:

rrename *.md renamed.md

我尝试了这个但它仍然不起作用:

rrename(){ find . -type f -name "'$1'" -execdir mv {} $2 ';' }

我该如何修复它?

答案1

*.md什么时候未引用,模式得到扩展参数被传递给函数。在这种情况下,$1是当前目录中的第一个 markdown 文件,$2是第二个 markdown 文件。如果你想传递一个图案对于一个函数,你必须引用它。

类似地,在函数中,$1未引用find它将会在启动之前被扩展(到当前目录中的 markdown 文件) 。

按照下面的方法做:

rrename() { find . -type f -name "$1" -execdir mv {} "$2" ';' }
# ...............................^..^................^..^

rrename '*.md' renamed.md
# ......^....^

所有这些引言都是必要的


顺便说一下,当有多种的特定目录中有多个 *.md 文件?所有文件都重命名为一个文件。

相关内容