+ -
当前位置:首页 → 问答吧 → 一个非常非常非常非常简单的问题

一个非常非常非常非常简单的问题

时间:2011-11-24

来源:互联网

這是zsh的寫法.
代码:
fname=John
lname=Doe
age=25
person=($fname $lname $age)
for x in ${person[@]};do
[ $x = ${person[${#person[@]}]} ] && echo "$x" || echo -n "$x ";
done

bash 代碼
代码:
fname=John
lname=Doe
age=25
person=($fname $lname $age)
sub=`expr ${#person[@]} - 1`
for x in ${person[@]};do
[ $x = ${person[$sub]} ] && echo "$x" || echo -n "$x ";
done


bash,數組下標打0開始,數組長度 = 最後一個元素下標 - 1;
而zsh是打1開始,數組長度 = 最後一個元素下標.
bash似乎要多走一步. 求解.

作者: naturalaw   发布时间: 2011-11-24

不明白为何楼主要这样实现,以下可否?
代码:
arrays=(a b c)

for (( ITERA=0; ITERA<${#arrays[@]}; ITERA+=1 )); do
    echo  ${arrays[$ITERA]}
done


最后一个元素,可以这样吧……
代码:
echo ${arrays[$((${#arrays[@]} - 1 ))]}

作者: kingkongmok   发布时间: 2011-11-24

为什么不用perl。既然你bash zsh混用,有兼容问题。就应该选高级一层的方法。

作者: eexpress   发布时间: 2011-11-24

kingkongmok 写道:
不明白为何楼主要这样实现,以下可否?
代码:
arrays=(a b c)

for (( ITERA=0; ITERA<${#arrays[@]}; ITERA+=1 )); do
    echo  ${arrays[$ITERA]}
done


最后一个元素,可以这样吧……
代码:
echo ${arrays[$((${#arrays[@]} - 1 ))]}

我也想這樣啊.可就是不行.我早試過了,所以才得用變量的.
引用:
echo ${arrays[$((${#arrays[@]} - 1 ))]}
bash: arrays: 坏的数组下标

作者: naturalaw   发布时间: 2011-11-24

eexpress 写道:
为什么不用perl。既然你bash zsh混用,有兼容问题。就应该选高级一层的方法。

好吧.先走完這一步.下一步,我學習perl了.

作者: naturalaw   发布时间: 2011-11-24