解析命令行论证中的奇怪行为

  • 本文关键字:命令行 bash
  • 更新时间 :
  • 英文 :

#!/bin/bash
for arg
do
        echo "$arg"
done

在文件中称为编译。

我尝试了:

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

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

,因为您使用的echo的版本将-e作为选项(含义"扩展逃生字符")。

编辑以添加:

对这类问题的标准响应是"使用printf",这严格准确但有些不满意。printf由于处理多个参数的方式而更令人讨厌。因此:

$ echo -e a b c
a b c
$ printf "%sn" -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 "%sn" "$*"; }
$ ech-o -e a b c
-e a b c
$

在这里说GNU ECHO不可能,但您可以使用printf。

for arg
do
    printf "%sn" "$arg"
done

相关内容

  • 没有找到相关文章

最新更新