如何转义从命令行参数存储为变量的特殊字符

时间:2014-10-09 16:28:13

标签: linux bash

您好我想编写一个脚本,允许我在命令行参数中使用任何字符(特殊包含)。因此,如果我像这样调用脚本它不应该有错误:

./myscript file *

在脚本中我想在带有该符号的目录中查找文件(但请注意,它不一定是该符号可能是%,@,#等所以我使用find但不知道如何逃避。

search = $1
find=$(find $search -name "*$2")

如果我查找的文件有符号通知该人,但是如果没有将该符号添加到该目录,并且我不知道如何逃避它。下面是我用来更改它的代码,但它也需要进行转义。

 mv $search $search$2

有关逃避它的任何想法,我做了平常但得到了奇怪的结果。即

find=$(find $search -name "*\$2")
mv $search $search\$2

1 个答案:

答案 0 :(得分:0)

如果我理解正确,调用必须如下所示,以避免shell在调用脚本之前展开*

./myscript file '*'

在您的脚本中,只需引用参数扩展即可。但是,您必须将反斜杠传递给-name的参数,以便find本身也不会特别对待该角色。

# No spaces around the equal sign!
search=$1
find=$(find "$search" -name \*\'"$2")
# ...
mv "$search" "$search$2"