Bash

Bash 腳本:如何將變數插入到 Bash 腳本中?

  • March 3, 2019

以下 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在最後執行以禁用它。不建議這樣做,並且強烈建議使用上面正確引用的方法。

引用自:https://unix.stackexchange.com/questions/481274