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周围的单引号。 –