0
#!/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]+ 没有出现。

4

2 回答 2

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
$
于 2012-10-24T03:52:35.360 回答
1

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

for arg
do
    printf "%s\n" "$arg"
done
于 2012-10-24T14:49:59.437 回答