这个例子是基于swaks,然而它并不是我用这个问题的唯一程序:)
我有一个变量SUBJECT="test subject"
然后我将命令附加到字符串:
SWAKS="
-t $TO
-h-From $FROM
--header Subject:$SUBJECT
--body $BODY
--auth
--auth-user=user@domain.com
--auth-password=d83kflb827Ms7d"
然后我将其作为./swaks $SWAKS
但是消息的主题是test
,因为忽略空格后的所有内容。
我尝试将引号更改为单引号,添加baslashes并且没有任何效果。我做错了什么?
我的最新尝试看起来像这样(来自stderr的输出):
./swaks -t '$TO' '\' -h-From '"test' subject"'
这是在开始和结束时使用单个qoutes,并在每个变量周围使用双引号。
答案 0 :(得分:1)
恕我直言,将所有命令行参数保存在单个变量中并不是一个好主意。我宁愿这样做:
./swaks \
-t "$TO" \
-h-From "$FROM" \
--header Subject:"$SUBJECT" \
--body "$BODY" \
--auth \
--auth-user=user@domain.com \
--auth-password=d83kflb827Ms7d
答案 1 :(得分:1)
这就是bash
提供数组的原因。
SWAKS=(
-t "$TO"
-h-From "$FROM"
--header "Subject:$SUBJECT"
--body "$BODY"
--auth
--auth-user=user@domain.com
--auth-password=d83kflb827Ms7d
)
# Appending additional arguments to the array in a loop
for f in attachments/*; do
# Same as SWAKS=( "${SWAKS[@]}" --attach "$f" )
SWAKS+=( --attach "$f" )
done
./swaks "${SWAKS[@]}"