2012-10-24 113 views
0
#!/bin/bash 

for arg 
do 
     echo "$arg" 
done 

在文件中調用compile。解析bash中的命令行參數 - 奇怪行爲

我嘗試這樣做:

compile ha -aa -bb -cc -dd -ee -ff -gg 
ha 
-aa 
-bb 
-cc 
-dd 

-ff 
-gg 

爲什麼-ee顯示不出來? 事實上,似乎 - [e] +沒有出現。

回答

4

由於echo的版本使用-e作爲選項(意思是「擴展轉義字符」)。

編輯補充:

該標準針對這種類型的問題是「用printf」,這是嚴格準確的,但有些不盡人意。由於它處理多個參數的方式,使用printf更麻煩。因此:

$ echo -e a b c 
a b c 
$ printf "%s\n" -e a b c 
-e 
a 
b 
c 
$ printf "%s" -e a b c 
-eabc$ # That's not what I wanted either 

當然,你只需要記住引用整個參數序列,但可能會導致惱人的報價轉義的問題。

因此,我爲你的快感呼應:

$ ech-o() { printf "%s\n" "$*"; } 
$ ech-o -e a b c 
-e a b c 
$ 
1

Here它說,這是不可能的GNU回波,但你可以用printf。

for arg 
do 
    printf "%s\n" "$arg" 
done