我有一个 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
(默认),反斜杠 ( ) 是您可能需要考虑的\*
另一种引用 ('*'
或) 的替代方法。"*"