2017-03-06 70 views
1

这个例子是基于swaks的字符串里的空格,但它不是我用哪里这个问题做我的头:)壳牌嵌入变量,命令

唯一的程序我有一个变量SUBJECT="test subject"

然后我追加的命令字符串:

SWAKS=" 
    -t $TO 
    -h-From $FROM 
    --header Subject:$SUBJECT 
    --body $BODY 
    --auth 
    [email protected] 
    --auth-password=d83kflb827Ms7d" 

然后我执行它作为./swaks $SWAKS

不过分该消息的项目为test,因为空格之后的所有内容都被忽略。

我试着将引号改为单引号,加入baslashes并没有任何作用。我究竟做错了什么?

我最新的尝试看起来像这样(从标准错误输出):

./swaks -t '$TO' '\' -h-From '"test' subject"'

这在开始和结束,双引号周围的每个变量使用单qoutes了。

+0

你试过了:SUBJECT =“'test subject'”单引号里面的双引号? –

+3

像这样经常被引用:http://mywiki.wooledge.org/BashFAQ/050 –

+0

具体来说,[Bash FAQ 50的第1.5节](http://mywiki.wooledge.org/BashFAQ/050#I .27m_constructing_a_command_based_on_information_that_is_only_known_at_run_time)。 – chepner

回答

1

这就是为什么bash提供数组。

SWAKS=(
    -t "$TO" 
    -h-From "$FROM" 
    --header "Subject:$SUBJECT" 
    --body "$BODY" 
    --auth 
    [email protected] 
    --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[@]}" 
+0

我可以使用“for”循环将参数追加到数组? – Moseleyi

+0

确实;你可以使用'+ ='运算符追加到一个数组:'SWAKS + =( - 另一个选项“和它的参数”)''。 – chepner

+0

我将它与for循环一起使用,它的作用就像一个魅力,有时间阅读更多关于这些数组的信息 – Moseleyi

1

恕我直言,保持所有命令行参数在一个变量不是一个好主意。我宁愿这样做:

./swaks       \ 
    -t "$TO"      \ 
    -h-From "$FROM"    \ 
    --header Subject:"$SUBJECT" \ 
    --body "$BODY"     \ 
    --auth       \ 
    [email protected] \ 
    --auth-password=d83kflb827Ms7d 
+0

我之所以用一个变量来做这件事,是因为在那部分命令字符串之后,有一个循环会逐个添加附件。我找不出任何其他方式来实现这两个 – Moseleyi