以下失败,我不明白为什么:
$ 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办呢?
在Bash中,我想取消设置hashmap的条目.但我失败了.代码如下:
declare -A arr
arr["a'b"]=3
echo ${!arr[@]} ## output: a'b
key="a'b"
unset arr[$key] ## error: -bash: unset: `arr[a'b]': not a valid identifier
Run Code Online (Sandbox Code Playgroud)
我怎样才能取消此条目?
我试图解析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的方式似乎是一个问题.我很感激指导.
bash ×4
dictionary ×1
echo ×1
linux ×1
parsing ×1
quotes ×1
sed ×1
shell ×1
syntax ×1
ubuntu-12.04 ×1