无法停止 bash 扩展从 shellscript 传递到应用程序的星号(通配符)

无法停止 bash 扩展从 shellscript 传递到应用程序的星号(通配符)

我有一个 shell bash 脚本,应该将星号 ["*"] 通配符传递给应用程序,而不使用引号。我从几个小时开始阅读,总是发现在调用 shell 脚本中使用“set -f”,但这没有任何作用。可能我误解了一些东西,但我不明白是什么。

我正在使用 mono 框架编写一个 C# 应用程序,我在 bash 中的调用如下所示:

#!/bin/bash
set -f
mono app.exe "$@"

我的名为“runit”的 shell 脚本将像这样使用:

运行 *

有人能解释一下吗?我甚至尝试从此脚本输出活动的 shell 选项,但什么也没显示。

答案1

#!/bin/bash
set -f
mono app.exe "$@"

set -f没有任何效果,因为双引号参数数组 ( "$@") 不再进行进一步的扩展。

如果"$@"包含值为 的参数*,则它将保持mono app.exe不变。

问题是,调用此包装器脚本的 shell 将想要展开星号,就像set +f默认情况一样。

您需要set -f在此调用 shell 中而不是在包装器中。


对于set +f(默认),反斜杠 ( ) 是您可能需要考虑的\*另一种引用 ('*'或) 的替代方法。"*"

相关内容