Bash,有没有一种方法可以获得与双引号相同的功能而不使用双引号

时间:2020-07-12 14:45:21

标签: bash

我希望获得与vim "$p"相同的效果,但是不使用双引号,其中$p是带有特殊字符和空格的路径。

例如一些理想的DOUBLE_QUOTE函数:vim $(DOUBLE_QUOTE $p)

经过大量的研究,我尝试了:

  • vim $(echo ${p@Q})

...全部都没有成功(我在路径中显示引号)

背景:原因是字符串是在几个窗口批处理脚本和程序之间传递的,并且我花了整个周末试图通过多个层级将双引号转义,但没有成功。

1 个答案:

答案 0 :(得分:4)

做完

IFS=

您可以使用

vim $p

否则,不会。


使用默认值IFSbash将在空格,制表符和/或换行符序列上拆分$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'