我正在尝试通过Bash打印#!/
,但它不打印它,而是打印以下内容。
parth@parth-ubuntu64:$ echo "#!\/"
bash: !\/: event not found
EDITED: 请允许我再做一次更新。你如何做以下工作?我想我应该使用python而不是bash。我试图这样做的原因是因为,我想把它管道到一个需要sudo权限的文件中。这是我可以执行sudo =>的唯一方法。 sudo sh -c“echo something> file”
sh -c 'echo \'#!/bin/bash \' '
答案 0 :(得分:4)
在双引号内(并启用了历史记录扩展),!
具有特殊含义。要按字面打印这些字符,请使用单引号而不是双引号:
$ echo '#!\/'
#!\/
可以使用set +H
在交互式shell中禁用历史记录扩展,这允许您使用双引号:
$ set +H
$ echo "#!\/"
#!\/
通常,如果不需要插入变量(例如在这种情况下),则应使用单引号。
请注意,没有必要转义/
,因此如果您的所需输出为\
,则可以从#!/
之前移除$ echo '#!/'
#!/
:
{{1}}
答案 1 :(得分:2)
在交互式shell中!
受历史扩展的影响。例如,!!
是您键入的最后一个命令,!$
是该命令的最后一个参数。为避免历史记录扩展,请使用反斜杠转义!
或使用单引号。
echo '#!/'
这在shell脚本中是必需的,仅在交互式shell中有效(除非您在shell脚本中有意启用set -o history
和set -o histexpand
)。
请允许我再进行一次更新。你如何做以下工作?
sh -c 'echo \'#!/bin/bash \' '
单引号内无法使用单引号。 \'
不起作用。所以我们回到双引号。
sh -c "echo '#\!/bin/bash'"
答案 2 :(得分:1)
有些内容在双引号内解释,包括由感叹号引入的反斜杠和历史事件。请使用功能更强大的单引号:
echo '#!\/'
答案 3 :(得分:0)
您需要将文本放在单引号内,以便它不会解析。
$ echo '#!/'
#!/
$ echo '#!\/'
#!\/
答案 4 :(得分:0)
使用单引号而不是双引号。
echo '#!/'