![无法停止 bash 扩展从 shellscript 传递到应用程序的星号(通配符)](https://linux22.com/image/8627/%E6%97%A0%E6%B3%95%E5%81%9C%E6%AD%A2%20bash%20%E6%89%A9%E5%B1%95%E4%BB%8E%20shellscript%20%E4%BC%A0%E9%80%92%E5%88%B0%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E6%98%9F%E5%8F%B7%EF%BC%88%E9%80%9A%E9%85%8D%E7%AC%A6%EF%BC%89.png)
我有一个 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
(默认),反斜杠 ( ) 是您可能需要考虑的\*
另一种引用 ('*'
或) 的替代方法。"*"