2012-12-18 92 views
3

之間加逗號我想通過unix腳本調用一個程序,它將會是通用腳本,所以參數可以很。調用語句會出現一些類似在命令行參數

<scriptname> <procedure name> <param1> <param2> <param3> <param4>.. so on 

我需要的是從第二個命令行paramater去年放慢參數我想逗號separeted像這樣

<param1>,<param2>,<param3>,<param4> 

我可以這樣使用一個循環做的所有值,即從第二個命令行參數I開始迭代每個參數並在其中添加逗號。我的問題是我可以用單個命令來做到這一點嗎?

注: - 空間應該如何處理,如果正常禮物是命令行參數,最後一個參數後,不應該有任何逗號

回答

4

所有參數是[email protected]。您可以使用sed來代替用逗號空格,然後(或從一開始,cut第一場)

echo [email protected] | sed s/" "/,/g | cut -d "," -f2- 

向前邁進了一步,你可以將它分配給一個變量:

comma_separated_params=`echo [email protected] | sed s/" "/,/g | cut -d "," -f2-` 
+1

這將轉換參數內的空間變成逗號以及消失,並在切如果第一個參數包含空格或逗號,則爲錯誤的地方。 –

3

"${*:2}"擴張至起始於$ 2的參數列表,由IFS的第一個字符分隔:

saveIFS=$IFS 
IFS="," 
args="${*:2}" 
IFS=$saveIFS 
echo "$args" 

請注意,這可以正確保留內部空間而不是將它們轉換成逗號。

+0

有趣,從我+1。很高興知道。 –

+0

工程很好..謝謝 –

1

下面這種技術,在子shell執行回聲,允許你設置IFS,然後讓變化與子shell

$ set -- "a b c" "d e f" "g h i" 
$ with_comma=$(IFS=,; echo "$*") 
$ echo "$with_comma" 
a b c,d e f,g h i 
+0

另一個有趣的選擇..謝謝 –