在bash中解析命令行参数 - 奇怪的行为

时间:2012-10-24 03:47:35

标签: bash

#!/bin/bash

for arg
do
        echo "$arg"
done

在名为compile的文件中。

我试过了:

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

-ff
-gg

为什么-ee不显示? 事实上,似乎 - [e] +没有出现。

2 个答案:

答案 0 :(得分: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 :(得分:1)

Here它说GNU echo不可能,但你可以使用printf。

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