【发布时间】:2014-08-30 13:32:53
【问题描述】:
有没有办法告诉 bash/zsh 根本不解析引号,而是将它们逐字传递给 shell 函数?
$ argtest abc def "ghi jkl" $'mno\tpqr' $'stu\nvwx'
abc
def
"ghi jkl"
$'mno\tpqr'
$'stu\nvwx'
你可能在想为什么我不这样做
argtest abc def '"ghi jkl"' "$'mno\tpqr'" "$'stu\nvwx'"
但是我试图创建的argtest 函数试图环绕其他可以具有noglob 前缀的命令。所以我需要一种能够区分* 和'*' 的方法。
【问题讨论】:
-
XY 问题。告诉我们您希望
argtest如何工作,我们可以建议如何(如果有的话)最好地实现这一目标。 -
@chepner “我正在尝试创建一个函数来包装可以具有 noglob 前缀的其他命令。”
-
我的意思是,你想要什么样的包装?你能举个例子说明
noglob是如何适应这个的吗? -
"bash/zsh" 是一个混乱的词组——当你进入特定于实现的细节时,它们是非常不同的 shell,你不太可能在这里获得适用于他们两者的答案。
-
顺便说一句——在
*和'*'之间的区别很重要的上下文中,通常的方法是检查文件是否存在。如果存在,则将其视为 glob 扩展;如果没有,则假设它是一个未扩展的坏球体,则报告失败。或者,要求您的调用者使用shopt -s nullglob并完全禁用未扩展 glob 的文字传递。