Bash
Bash 腳本:如何將變數插入到 Bash 腳本中?
以下 bash 腳本執行良好:
#!/bin/bash echo '!PaSsWoRd!' | openconnect --csd-wrapper=/home/user/.cisco/csd-wrapper.sh --authenticate --user=abcde123 --authgroup="tunnel My Company" --passwd-on-stdin vpn.mycompany.com
但是,我想用這樣的變數替換以前的輸入參數:
#!/bin/bash WRAPPER=/home/user/.cisco/csd-wrapper.sh USER=abcde123 PASSWD=!PaSsWoRd! AUTHGROUP=tunnel My Company DOMAIN=vpn.mycompany.com echo '$PASSWD' | openconnect --csd-wrapper=$WRAPPER --authenticate --user=$USER --authgroup="$AUTHGROUP" --passwd-on-stdin $DOMAIN
不幸的是,這種嘗試不再起作用。我想我必須輸入一些引號字元或類似字元。你知道下面的 bash 腳本有什麼問題嗎?
對包含變數的賦值缺少引號
!
是這裡的問題。!
shell在將其分配給變數之前嘗試解釋該字元以首先執行歷史擴展。引用應防止 shell 將其中的內容解釋'..'
為特殊內容並保持原樣。作業應該寫成
PASSWD='!PaSsWoRd!'
並通過帶引號的擴展傳遞變數
echo "$PASSWD" | openconnect --csd-wrapper="$WRAPPER" --authenticate --user="$USER" --authgroup="$AUTHGROUP" --passwd-on-stdin "$DOMAIN"
set +H
或者通過在腳本頂部包含該行來暫時關閉腳本中的歷史擴展。隨後set -H
在最後執行以禁用它。不建議這樣做,並且強烈建議使用上面正確引用的方法。