将这样的调用处理到我的shell脚本的最佳方法是什么?
./cars Mazda Toyota 2010 Honda BMW VW 2009
打印出来:
Mazda 2010
丰田2010
本田2009
宝马2009
大众汽车2009
我不能使用数组,因为它是最简单的shell版本,所以它不支持它们。有什么想法吗?
答案 0 :(得分:2)
#!/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
答案 1 :(得分:0)
#!/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
答案 2 :(得分:0)
你可以使用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