Linux 使用选项-c在shell脚本中打印单引号

Linux 使用选项-c在shell脚本中打印单引号,linux,bash,shell,unix,echo,Linux,Bash,Shell,Unix,Echo,这听起来可能是新手,但我尽了一切努力让它发挥作用。 我想在shell脚本中打印一个带单引号的单词:'John'。我不能替换/bin/bash-l-c,因为这部分代码是由Java运行的,我必须以字符串形式传递shell命令。我也尝试了echo-e选项 /bin/bash -l -c 'echo "'John'"' 我想要的输出是: 'John' 我试图避开单引号,但到目前为止没有任何帮助。有什么想法吗?尝试删除双引号并转义单引号: /bin/bash -l -c "echo \'John\'"

这听起来可能是新手,但我尽了一切努力让它发挥作用。 我想在shell脚本中打印一个带单引号的单词:'John'。我不能替换
/bin/bash-l-c
,因为这部分代码是由Java运行的,我必须以字符串形式传递shell命令。我也尝试了
echo-e
选项

/bin/bash -l -c 'echo "'John'"'
我想要的输出是:

'John'

我试图避开单引号,但到目前为止没有任何帮助。有什么想法吗?

尝试删除双引号并转义单引号:

/bin/bash -l -c "echo \'John\'"
/bin/bash -c 'echo "'\''John'\''"'

不能在bash中嵌套单引号,因此该行被解释为

/bin/bash -l -c 'echo "'John'"'
                |......| ---------- single quoted
                       |....| ----- not quoted
                            |.| --- quoted
因此,正确地转义单引号:

/bin/bash -l -c "echo \'John\'"
/bin/bash -c 'echo "'\''John'\''"'
或者,如果单引号中的字符串非常简单

/bin/bash -c 'echo "'\'John\''"'

一种常见的解决方法是使用
printf
,因此不需要在格式字符串中使用文字单引号

bash -l -c 'printf "\x27John\x27\n"'
(在这里使用
bash-l
可能会被误导和不可移植。)