【问题标题】:How do I process something like this in unix shell?如何在 unix shell 中处理这样的事情?
【发布时间】:2009-11-28 21:26:35
【问题描述】:

处理这样对我的 shell 脚本的调用的最佳方法是什么?

./cars Mazda Toyota 2010 Honda BMW VW 2009

这样打印出来:

马自达 2010

丰田 2010

本田 2009

宝马 2009

大众 2009

我不能使用数组,因为它是最简单的 shell 版本,所以它不支持它们。有什么想法吗?

【问题讨论】:

  • 为此编写 Python 脚本谁最快?
  • 我正在尝试在 unix shell 而不是 Python 中编写此代码

标签: shell unix


【解决方案1】:
#!/bin/sh

CARS=

while [ $# -gt 0 ]; do
    # Cheesy way to test if $1 is a year.
    if [ "$1" -gt 0 ] 2> /dev/null; then
        YEAR=$1

        for CAR in $CARS; do
            echo $CAR $YEAR
        done

        CARS=
    else
        # Add car to list
        CARS="$CARS $1"
    fi

    # Process the next command-line argument.
    shift
done

【讨论】:

    【解决方案2】:
    #!/bin/sh
    for i in "$@"; do
        case x"$i" in x[0-9]*)
            for j in $justCars; do
                echo $j $i
            done
            justCars=
            continue
            ;;
        esac
        justCars="$justCars $i"
    done
    

    【讨论】:

      【解决方案3】:

      您可以将 gawk 用于数组

      args="$@"
      echo $args | tr " " "\n" | awk 'BEGIN{d=1}
      /^[0-9]+/{  
        for(i=1;i<=e;i++){  print a[i],$0  }
        delete a
        e=0
      }
      !/^[0-9]+/{  a[++e]=$0}'
      

      输出

      # ./shell.sh  Mazda Toyota 2010 Honda BMW VW 2009
      Mazda 2010
      Toyota 2010
      Honda 2009
      BMW 2009
      VW 2009
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 2011-04-17
        相关资源
        最近更新 更多