以下失败,我不明白为什么:
$ echo "#!"
Run Code Online (Sandbox Code Playgroud)
以下也失败并出现相同的错误消息:
$ echo "\#!"
Run Code Online (Sandbox Code Playgroud)
错误信息:
-bash: !": event not found
Run Code Online (Sandbox Code Playgroud)
为什么会失败?该怎么echo办呢?
当我试图删除连续的重复行
awk "!x[$0]++" file
它的报道 x[: Event not found.
甚至同样的情况
sed -i -e "$!N; /^\(.*\)\n\1$/!P;D" file 以及报告
N: Event not found.
我也试过单引号,但没有帮助
任何想法来解决这些问题
有时我觉得有必要在我的git提交消息中加入一些表达性.不幸的是,bash似乎并不喜欢这样.
iblue@silence ~/git/wargames $ git commit -m "Frustrating <insert object of frustration here>!"
-bash: !": event not found
Run Code Online (Sandbox Code Playgroud)
使用反斜杠转义有帮助,但这包括提交消息中的反斜杠.
如何正确地逃避bash中的感叹号?
我试图解析VNC服务器启动事件的输出,并在命令替换中使用sed解析时遇到问题.具体来说,远程VNC服务器的启动方式如下:
address1="user1@lxplus.cern.ch"
VNCServerResponse="$(ssh "${address1}" 'vncserver' 2>&1)"
Run Code Online (Sandbox Code Playgroud)
然后解析在此启动事件中生成的标准错误输出,以便提取服务器和显示信息.此时变量的内容VNCServerResponse如下所示:
New 'lxplus0186.cern.ch:1 (user1)' desktop is lxplus0186.cern.ch:1
Starting applications specified in /afs/cern.ch/user/u/user1/.vnc/xstartup
Log file is /afs/cern.ch/user/u/user1/.vnc/lxplus0186.cern.ch:1.log
Run Code Online (Sandbox Code Playgroud)
可以通过以下方式解析此输出,以便提取服务器并显示信息:
echo "${VNCServerResponse}" | sed '/New.*desktop.*is/!d' \
| awk -F" desktop is " '{print $2}'
Run Code Online (Sandbox Code Playgroud)
结果如下:
lxplus0186.cern.ch:1
Run Code Online (Sandbox Code Playgroud)
我想要做的是在命令替换中使用此解析,如下所示:
VNCServerAndDisplayNumber="$(echo "${VNCServerResponse}" \
| sed '/New.*desktop.*is/!d' | awk -F" desktop is " '{print $2}')"
Run Code Online (Sandbox Code Playgroud)
在尝试这样做时,我收到以下错误:
bash: !d': event not found
Run Code Online (Sandbox Code Playgroud)
我不知道如何解决这个问题.在命令替换中使用sed的方式似乎是一个问题.我很感激指导.