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
的内容)的整个概念在我看来很奇怪,但您可能知道您在这里做什么。。。。