我在 bash 中有以下 shell 脚本:
function zzqfoo {
python ~/my/dir/path/zzqfoo.py $(abspath $1) $2
}
这个想法是在命令行上使用本地文件名调用 python 程序“zzqfoo.py”,但是 zzqfoo.py 通过$(abspath $1)
.
然而当我打电话时
>>> zzqfoo myfile *
shell 破坏了*
并将天知道什么发送到 zzqfoo.py 作为第二个参数。
如何防止*
被损坏? (我希望 zzqfoo.py 按原样接收第二个命令行参数。)
谢谢!
答案1
shell 破坏了
*
并将天知道什么发送到 zzqfoo.py 作为第二个参数。
它不会“破坏” *
.它做了它一贯做的事情:扩展*
as 通配符,匹配当前目录中的文件和目录的名称。
你应该:
*
将其作为参数传递时引用- quote
$1
等$2
在函数中使用时,这样 shell 就不会对其进行分词或通配符扩展
所以:
function zzqfoo {
python ~/my/dir/path/zzqfoo.py "$(abspath "$1")" "$2"
}
并运行它:
zzqfoo myfile '*'
答案2
引用一下:
$ zzqfoo myfile "*"
或者
$ zzqfoo myfile \*
或者
$ zzqfoo myfile '*'