【问题标题】:Parsing command line arguments in bash - strange behavior在 bash 中解析命令行参数 - 奇怪的行为
【发布时间】: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


    【解决方案1】:

    因为您使用的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
    $
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-31
        • 2012-04-05
        相关资源
        最近更新 更多