当我传递单引号时,如何阻止Bash转义单引号$@
我有一个bash脚本,它试图将一些传入参数传递给另一个程序。基本上是:当我传递单引号时,如何阻止Bash转义单引号$@,bash,escaping,Bash,Escaping,我有一个bash脚本,它试图将一些传入参数传递给另一个程序。基本上是: set -x echo $@ terraform $@ set +x 执行时(它被另一个脚本通过docker调用,但我认为这并不重要……),它输出: + echo force-unlock e4014910-6b34-47a7-ad93-51842a63f0fa -var ''\''environment=qa'\''' force-unlock e4014910-6b34-47a7-ad93-51842a63f0fa -
set -x
echo $@
terraform $@
set +x
执行时(它被另一个脚本通过docker调用,但我认为这并不重要……),它输出:
+ echo force-unlock e4014910-6b34-47a7-ad93-51842a63f0fa -var ''\''environment=qa'\'''
force-unlock e4014910-6b34-47a7-ad93-51842a63f0fa -var 'environment=qa'
+ terraform force-unlock e4014910-6b34-47a7-ad93-51842a63f0fa -var ''\''environment=qa'\'''
Too many command line arguments. Configuration path expected.
如何让它执行回显参数:
terraform force-unlock e4014910-6b34-47a7-ad93-51842a63f0fa -var 'environment=qa'
而不是
terraform force-unlock e4014910-6b34-47a7-ad93-51842a63f0fa -var ''\''environment=qa'\'''
引用它:
terraform“$@”
我得到了相同的输出,谢谢,set+x
输出你确定docker调用层没有添加这些额外的引用吗?当我想调用类似于docker run bash-c“$@”
的东西以保留$@中的间距时,我会做类似的事情。我认为我的示例是错误的,并且给出了一个假否定,我将从强制解锁改为计划,看看这是否适用于“