将 '*' 作为命令行参数传递给 shell 脚本

将 '*' 作为命令行参数传递给 shell 脚本

我在 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 '*'

相关内容