【发布时间】:2012-10-24 03:47:34
【问题描述】:
#!/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]+ 没有出现。
【问题讨论】:
标签: 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]+ 没有出现。
【问题讨论】:
标签: bash
因为您使用的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
$
【讨论】:
Here 它说使用 GNU echo 是不可能的,但你可以使用 printf。
for arg
do
printf "%s\n" "$arg"
done
【讨论】: