Bash 逃脱!显示为文字\!
我正试图在Bash的一行中为一个文件编写一个Python程序。我正在尝试:Bash 逃脱!显示为文字\!,bash,escaping,punctuation,Bash,Escaping,Punctuation,我正试图在Bash的一行中为一个文件编写一个Python程序。我正在尝试: $ printf "#\!/usr/bin/python3\nprint('hi\!')\nwhatever()" > whatever.py 但这给了: #\!/usr/bin/python3 print('Hi\!') whatever() 如何将其输出: #!/usr/bin/python3 print('Hi!') whatever() 您可以使用: set +H # disable history
$ printf "#\!/usr/bin/python3\nprint('hi\!')\nwhatever()" > whatever.py
但这给了:
#\!/usr/bin/python3
print('Hi\!')
whatever()
如何将其输出:
#!/usr/bin/python3
print('Hi!')
whatever()
您可以使用:
set +H # disable history expansion
printf "#!/usr/bin/python3\nprint('hi!')\nwhatever()\n"
set -H # enable history expansion again
最好的方法是使用:
- 首先,我们使用
而不是printf%s yourString
。这就是printfyourstring
应该使用的方式(在这种情况下不需要,但在一般情况下更安全)李>printf
- 使用
将%s\n
的每个附加参数打印为一行printf
- 在第一行中,没有单引号,因此我们可以用单引号引用整个第一行,而不必转义
代码>
- 在第二行中,有单引号,因此我们不能用单引号引用整个第二行。然而,我们可以引用
代码>用单引号括起来,其余部分用双引号括起来。在
中,字符串bash
可以写成:ab
,ab
,“ab”
,“ab”
“a”和“b”
代码>从引号中取出:printf“#”\!“/usr/bin/python3\n打印('hi“\!”)\nwhatever()”
,或者如果不需要扩展,请使用ANSI-C引号echo$”#/usr/bin/python3\n打印(\'hi\')\nwhatever()'
#!/usr/bin/python3
print('hi!')
whatever()
cat > whatever.py <<EndOfPythonProgram
#!/usr/bin/python3
print('hi!')
whatever()
EndOfPythonProgram
printf '%s\n' '#!/usr/bin/python3' "print('hi"'!'"')" 'whatever()' > whatever.py