2016-05-25 43 views
1

我在last question中得到了非常好的回覆。這個想法是從命令行處理N個輸入,將前9個保存到變量中,並且將一個字符串保存爲10個。字符串在bash中與空間並置,並將引號附在

我發現這是最簡單的解決方案。

var1="$1" 
var2="$2" 
var3="$3" 
var4="public" 
var5="$5" 
var6="''" 
var7="$7" 
var8="$8" 
var9="$9" 
var10="$(shift 9; IFS=""; echo "$*")" 

echo snmptrap $var1 $var2 $var3 $var4 $var5 $var6 $var7 $var8 $var9 "$var10" 

snmptrap $var1 $var2 $var3 $var4 $var5 $var6 $var7 $var8 $var9 "$var10" 

輸出看起來像這樣...

./snmptas -v 2c -c "" 9.48.85.57 "" 1.3.6.1.4.1.2.6.201.3 s s ABC DDEF EFFF 

snmptrap -v 2c -c public 9.48.85.57 '' 1.3.6.1.4.1.2.6.201.3 s s ABCDDEFEFFF 

但我以這種形式

「ABC DDEF EFFF」 通緝$ var10。

這需要更改。它取消了空格。

var10="$(shift 9; IFS=""; echo "$*")" 

我該如何讓var10 =「ABC DDEF EFFF」?

謝謝

回答

1

一個帶echo的子shell在那裏並不真正適合。這樣更好:

shift 9 
var10="$*" 

如果你想周圍的報價爲價值的一部分,然後更改最後一行:

var10=\""$*"\" 

無關的,我想知道,如果你的治療var6做你想要的。我懷疑,這將是更接近你真正想要的結果:

snmptrap $var1 $var2 $var3 $var4 $var5 '' $var7 $var8 $var9 "$var10" 

或者這樣:

var6= 
snmptrap $var1 $var2 $var3 $var4 $var5 "$var6" $var7 $var8 $var9 "$var10" 

但如果我的猜測是錯誤的,你原來的處理正在按預期那麼沒關係,忽略這些備註。

0

爲了讓變量var10包含引號,你需要的東西是這樣的:

shift 9 
printf -v "var10" '"%s"' "$*" 

而且,如果你想引用所有變量,例如失蹤的人有一個地方,使用此:

#!/bin/bash 
set -- -v 2c -c "" 9.48.85.57 "" 1.3.6.1.4.1.2.6.201.3 s s ABC DDEF EFFF 

for ((i=1;i<=9;i++)); do 
    printf -v "var$i" '"%s"' "${!i}" 
done 

shift 9 
printf -v "var10" '"%s"' "$*" 

echo snmptrap $var{1..10} 

要讓腳本讀取傳遞的參數而不是寫在代碼中的參數,只需註釋掉set --行。


輸出將是:

$ ./snmptrap 
snmptrap "-v" "2c" "-c" "" "9.48.85.57" "" "1.3.6.1.4.1.2.6.201.3" "s" "s" "ABC DDEF EFFF" 

每個參數報價意味着沒有問題,把它們作爲輸入腳本。

相關問題