Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
Linux 如何转义bash脚本命令行中传递的参数_Linux_Bash_Shell_Ubuntu - Fatal编程技术网

Linux 如何转义bash脚本命令行中传递的参数

Linux 如何转义bash脚本命令行中传递的参数,linux,bash,shell,ubuntu,Linux,Bash,Shell,Ubuntu,我有一个变量,它来自于一些地方,比如: VAR1='hhgfhfghhgf"";2Ddgfsaj!!!$#^$\'&%*%~*)_)(_{}||\\/' 现在我有这样的命令 ./myscript.sh '$VAR1' 我从一些diff过程中得到$VAR1,当我显示它时,它看起来与上面的完全一样 现在该命令失败了,因为变量中已经有一个引号。在我使用它的过程中,它在那个点被展开,这导致了错误 我可以控制myscript.sh,但不在命令之上 有什么方法可以在脚本中获取变量吗?当传递到脚本

我有一个变量,它来自于一些地方,比如:

VAR1='hhgfhfghhgf"";2Ddgfsaj!!!$#^$\'&%*%~*)_)(_{}||\\/'
现在我有这样的命令

./myscript.sh '$VAR1'
我从一些diff过程中得到$VAR1,当我显示它时,它看起来与上面的完全一样

现在该命令失败了,因为变量中已经有一个引号。在我使用它的过程中,它在那个点被展开,这导致了错误

我可以控制myscript.sh,但不在命令之上


有什么方法可以在脚本中获取变量吗?

当传递到脚本时,您所说的不可能失败。您的
脚本
可能存在无法正确展开变量的处理问题(或此参数将传入的命令)。您可以使用带有
%q
修饰符的
printf
来转义所有特殊字符,然后将其传递给脚本:

./myscript.sh "$(printf '%q\n' "$VAR1")"
。。。或者在希望传递到其他一些命令之前,在脚本中执行相同的操作:

VAR2="$(printf '%q\n' "$VAR1")"

bash
中的变量在
=
的两边都没有空格。它不应该是
var=1
,而是
var=1
@Inian加上左侧的变量不带美元符号。也就是说,我对答案很好奇。
/myscript.sh'$VAR1'
本身不能失败,因为变量没有被扩展。有人弄乱了
eval
语句吗?请附上一份展示error@Master:请你的问题更准确些。您在这里介绍的两个语句中没有语法错误,因此,如果有任何内容可能失败,则必须在对
myscript.sh
求值期间进行,但由于我们不知道此脚本中有什么内容,因此无法判断出哪里出了问题。因此,将字符串
$VAR
传递给脚本(而不是变量
VAR
的内容)的整个概念在我看来很奇怪,但您可能知道您在这里做什么。。。。