里面的单引号一切都保存无一例外。你甚至不能转义单引号。
这意味着你必须关闭报价,插入一些东西,然后重新输入。
'before'"$variable"'after'
'before'\''after'
'before'"'"'after'
正如你可以验证,上面的每一行只是一个单词的shell。字符串连接只是通过并置来完成。引用表示需要对空格或(非分裂)变量等事物进行不同的解释。有关引用的好教程,还请参见Mark Reed的答案。
注意,你应该避免通过程序连接字符串和变量来构建shell命令。这是一个不好的想法,类似于在大多数编程语言中使用eval,或构建SQL请求(SQL注入!)。
通常可以在命令中使用占位符,并且将命令与变量一起提供,以便被调用者可以以安全的方式替换占位符,而不是调用程序连接字符串,从而混合代码和数据。
例如,要在外部shell中运行带有参数的shell命令:
myvar=foo
/bin/sh -c 'echo "argument 1 is: $1"' -- "$myvar"
另一方面,以下是非常不安全的。不要这样做
myvar='foo"; rm -rf /mypreciousdata; echo "you were hacked' # exploit
/bin/sh -c "echo \"Argument 1 is: $myvar\""