0
我有以下用於發送電子郵件報告的bash腳本。我試圖讓它在bash上的郵件命令正常工作,並且想要使用需要使用eval的變量替換條件。bash變量替換不帶單引號
#!/bin/bash
LOG="/tmp/error.txt"
echo "test" > $LOG
INCLUDED="aaaaaaaaaaaaaaaaa"
EXCLUDED="bbbbbbbbbbbbbbbbb"
STR=INCLUDED
BODY="
Email Body:
\${!STR}"
#Set STR based on some condition
STR=EXCLUDED # set conditional with if statement
SUB="email subject"
PARAMS="-r \" Sender <[email protected]>\""
PARAMS+=" -s \"$SUB\""
PARAMS+=" -A $LOG" # use conditional with if statement
eval echo \"MESSAGE: "${BODY}"\" | mail $(eval echo ${PARAMS}) "[email protected]"
在運行下面的代碼,我必須要通過$ PARAMS輸出,而不字符串輸入到郵件命令,它無法識別的差異比較選項周圍的報價。我能找到的最接近的地方是使用$(eval echo $PARAMS)
,但由於它刪除了主題周圍的雙引號,所以這個主題就成了主題。
+ LOG=/tmp/error.txt
+ echo test
+ INCLUDED=aaaaaaaaaaaaaaaaa
+ EXCLUDED=bbbbbbbbbbbbbbbbb
+ STR=INCLUDED
+ BODY='
Email Body:
${!STR}'
+ STR=EXCLUDED
+ SUB='email subject'
+ PARAMS='-r " Sender <[email protected]>"'
+ PARAMS+=' -s "email subject"'
+ PARAMS+=' -A /tmp/error.txt'
+ eval echo '"MESSAGE:' '
Email Body:
${!STR}"'
++ echo 'MESSAGE:
Email Body:
bbbbbbbbbbbbbbbbb'
++ eval echo -r '"' Sender '<[email protected]>"' -s '$SUB' -A /tmp/error.txt
+++ echo -r ' Sender <[email protected]>' -s email subject -A /tmp/error.txt
+ mail -r Sender '<[email protected]>' -s email subject -A /tmp/error.txt [email protected]
如何傳遞到$ params到郵件命令傳遞主題(-s)引述字符串?
是否在數組變量中處理變量替換?它會導致相同的問題 –
變量替換髮生在向數組中添加值時。當您使用單引號時,不會進行替換,並且在使用雙引號替換完成時。變量只能評估一次。將數組傳遞給'mail'時,不會對數組值進行替換,只是在數組本身上進行替換。否則評估會發生兩次。 – ceving
該解決方案在替換時不會刪除$ PARAMS周圍的單引號。 –