对于我的bash脚本,我需要做4件事,输出说“脚本名称:”和名称。 “#Parameters:”和金额。 将给定参数放入数组中。 在偶数位置打印一个。
我已经成功地完成了所有这些工作但是以一种非常静态的方式,所以我想知道是否有一种更有活力的方式来做这件事?
我目前的代码:
echo "Name of the script: $0"
echo "# paramters: $#"
array1=($1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12)
echo $2 $4 $6 $8 $10 $12
答案 0 :(得分:3)
你的两个第一行很好(除了拼写错误):
echo "Name of the script: $0"
echo "# paramters: $#"
然后打印偶数(不将它们放在数组中):
while (($#)); do
shift
(($#)) && printf "%s\n" "$1"
shift
done
您的参数已设置为位置参数。内置shift
转换所有这些参数,丢弃第一个参数。所以我们移动并打印第一个并移位并重复,直到没有更多的参数。
你确实想把你的参数放在一个数组中。继续这样:
array=( "$@" )
(注意引号和特殊变量$@
的使用)。然后你可以循环遍历数组的所有索引并打印对应于偶数的字段(好吧,奇数,因为字段的编号从0
开始):
for i in "${!array[@]}"; do
((i%2==1)) && printf "%s\n" "${array[i]}"
done
或使用C风格的循环
for ((i=1;i<${#array[@]};i+=2)); do
printf "%s\n" "${array[i]}"
done
(我更喜欢选项1!)。