2016-12-28 64 views
1

我真的沒有找到解決這個問題的方法: 假設我有一個有多行的變量,每行最後應該是一個參數。Bash:將變量內容作爲參數插入命令替換 - 如何正確引用?

line 1 
line two 
... 

我只在運行時獲取這個數據,但它應該是建立這樣一個命令:

answer="$(dialog --menu 'Menu title' 0 0 0 'line 1' - 'line two' - ... 3>&1 1>&2 2>&3)" 

(數據必須由分離 - 但這不是問題。)

我想我真的嘗試過所有可能的組合,但它不會奏效。我檢查這個網站已經但是我>想<它沒有提供一個解決我的問題:http://mywiki.wooledge.org/BashFAQ/050

我應該嘗試切換的分詞?

這是我的代碼,截至目前:

list="" 
while read p; do 
    list="$list '$p' - " 
done <<< $line_separated_input 

answer="$(dialog --menu 'Chosse sth' 0 0 0 $list 3>&1 1>&2 2>&3)" 

使用數組也沒有工作(如(5)這裏建議:https://superuser.com/a/360986):(如何停止的報價裏面的東西字分裂,即使這個報價東西插入,因爲變量替換

編輯:謝謝大家,引用$line_separated_input是解決方案的一部分與數組列表,而不是一個變量一起使用它,終於解決了我的問題 您可以檢查。對於你自己來說,進行額外的命令替換會讓事情變得更糟DER:

> list="'a a' 'b c'"; echo "$(echo $list)" 
'a a' 'b c' 
> list="'a a' 'b c'"; echo "$(echo "$list")" 
'a a' 'b c' 

兩人都沒有預期的輸出。這是隻有我做到以下幾點:

> list=('a a' 'b c'); echo "$(echo "${list[@]}")" 
a a b c 

Tadaa!謝謝大家:)

+0

'tr'\ n'' - '<<<「$ line_separated_input」'爲您工作嗎? – mustaccio

+2

只要用引號! '...完成<<<「$ line_separated_input」***與報價!!! *** –

回答

0

由於gniourf_gniourf評論,你可能只需要雙引號你的變量,如... done <<< "$line_separated_input"。用雙引號括起來的論點表現爲一個單詞,即使它包含空白分隔符,因此它可以防止word splitting,這可能會導致意想不到的後果。

爲了更好地舉例說明,請參見下面的例子:

var="/tmp/my directory" 
mkdir -p "$var" 

輸出/tmp/my directory創建

現在的目錄,沒有雙引號:

var="/tmp/my directory" 
mkdir -p $var 

輸出:目錄/tmp/my被創建爲

+0

這不是完整的解決方案,請參閱我的編輯。但是,謝謝! :-) – flix