Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash,有没有一种方法可以在不使用双引号的情况下获得与双引号引用变量相同的函数_Bash - Fatal编程技术网

Bash,有没有一种方法可以在不使用双引号的情况下获得与双引号引用变量相同的函数

Bash,有没有一种方法可以在不使用双引号的情况下获得与双引号引用变量相同的函数,bash,Bash,我希望获得与vim“$p”相同的效果,但不使用双引号,其中$p是一个带有特殊字符和空格的路径 e、 g.理想的DOUBLE\u QUOTE功能:vim$(DOUBLE\u QUOTE$p) 经过大量研究,我尝试: vim$(echo${p@Q}) …都没有成功(我在路径中看到引号) 背景:原因是字符串是在几个窗口批处理脚本和程序之间传递的,我花了一个周末试图通过多个层转义双引号,但没有成功。完成后 IFS= 你可以用 vim$p 否则,不会 默认值为IFS,bash将在空格、制表符和/

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

e、 g.理想的
DOUBLE\u QUOTE
功能:
vim$(DOUBLE\u QUOTE$p)

经过大量研究,我尝试:

  • vim$(echo${p@Q})
…都没有成功(我在路径中看到引号)

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

完成后

IFS=
你可以用

vim$p
否则,不会


默认值为
IFS
bash
将在空格、制表符和/或换行符序列上拆分
$p
的值。这样就不可能发送
a␠␠b
(中间两个空格)到
双引号
,而
双引号
将无法区分
a␠b从
a开始(中间的空格)␉b
(中间的选项卡)

此外,
DOUBLE\u QUOTE
返回的值也将进行此拆分

因此,

vim$(双引号$p)
必须是

vim“$(双引号“$p”)”
使用默认值
IFS


另一方面,如果您试图生成shell命令,可以查看的答案以获得帮助

比如说,

printf'%s\n'$(引用vim“$p”)”
输出

'vim'a b'
给定

p='ab'

#quote()-创建shell文本
#用法:printf'%s\n'$(引号“…”)
引号(){
本地前缀=“”
局部p
对于“$@”中的p,请执行以下操作
printf“$prefix”\'
printf%s“$p”| sed“s/”/“\\\”“/g”
printf
前缀=“”
完成
}
完成后

IFS=
你可以用

vim$p
否则,不会


默认值为
IFS
bash
将在空格、制表符和/或换行符序列上拆分
$p
的值。这样就不可能发送
a␠␠b
(中间两个空格)到
双引号
,而
双引号
将无法区分
a␠b从
a开始(中间的空格)␉b
(中间的选项卡)

此外,
DOUBLE\u QUOTE
返回的值也将进行此拆分

因此,

vim$(双引号$p)
必须是

vim“$(双引号“$p”)”
使用默认值
IFS


另一方面,如果您试图生成shell命令,可以查看的答案以获得帮助

比如说,

printf'%s\n'$(引用vim“$p”)”
输出

'vim'a b'
给定

p='ab'

#quote()-创建shell文本
#用法:printf'%s\n'$(引号“…”)
引号(){
本地前缀=“”
局部p
对于“$@”中的p,请执行以下操作
printf“$prefix”\'
printf%s“$p”| sed“s/”/“\\\”“/g”
printf
前缀=“”
完成
}

你可以用
ln-s“奇怪的东西和空格”创建一个名为
it
的符号链接,然后执行
vim it
你对脚本做了什么?为什么双引号不能满足您的需求?为什么不使用双引号?如果调用
myScript.sh“abc”
,则在sccript中变量
$1
的值不带引号。然后,您可以在
nextScript.sh“$1”
中将其传递到下一个脚本。询问您的实际问题,而不是您认为该问题的解决方案。如果其中一个特殊字符是
#
,您将很难不使用双引号。您可以使用
ln-s创建一个名为
it
的符号链接“带空格的奇怪东西”将其删除
,然后执行
vim it
您对脚本做了什么?为什么双引号不能满足您的需要?为什么不使用双引号?如果您调用
myScript.sh“a b c”“
,在脚本中变量
$1
的值不带引号。然后你可以在
nextScript.sh“$1”
内将其传递到下一个脚本。询问你的实际问题,而不是你认为该问题的解决方案。如果其中一个特殊字符是
#
,你将在不使用双引号的情况下度过一段艰难的时光。如果s=成功了,非常感谢!!!我也最终想出了一个“在最后的脚本中出现,我需要发送\\“^”,但是你的方式更干净了。如果s=成功了,非常感谢!!!我也最终想出了一个“在最后的脚本中出现,我需要发送\\“^”,但你的方式更干净。