我希望获得与vim "$p"
相同的效果,但是不使用双引号,其中$p
是带有特殊字符和空格的路径。
例如一些理想的DOUBLE_QUOTE
函数:vim $(DOUBLE_QUOTE $p)
经过大量的研究,我尝试了:
vim $(echo ${p@Q})
...全部都没有成功(我在路径中显示引号)
背景:原因是字符串是在几个窗口批处理脚本和程序之间传递的,并且我花了整个周末试图通过多个层级将双引号转义,但没有成功。
答案 0 :(得分:4)
做完
IFS=
您可以使用
vim $p
否则,不会。
使用默认值IFS
,bash
将在空格,制表符和/或换行符序列上拆分$p
的值。这样将无法将a␠␠b
(中间的两个空格)发送到DOUBLE_QUOTE
,并且DOUBLE_QUOTE
将无法区分a␠b
(中间的空格)与{ {1}}(位于中间的标签)。
此外,a␉b
返回的值也将受到这种分裂。
就这样
DOUBLE_QUOTE
必须是
vim $( DOUBLE_QUOTE $p )
使用默认值vim "$( DOUBLE_QUOTE "$p" )"
。
另一方面,如果您尝试生成shell命令,则可以查看this question的答案以寻求帮助。
例如,
IFS
输出
printf '%s\n' "$( quote vim "$p" )"
给予
'vim' 'a b'
和
p='a b'