2012-10-24 85 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