zsh-echo的副作用?

zsh-echo的副作用?,zsh,Zsh,出于某种原因,此脚本将在结尾与所有的“echo”一起使用,但如果没有它们,$wall将是一个空字符串。这似乎真的很奇怪 #!/bin/zsh if [ ! -n "$1" ] ; then files=(~/pictures/backgrounds/*jpg) else while [ $1 ] ; do files+=(`echo $1/*jpg`) shift done fi echo $files N=${#files} echo

出于某种原因,此脚本将在结尾与所有的“echo”一起使用,但如果没有它们,$wall将是一个空字符串。这似乎真的很奇怪

#!/bin/zsh

if [ ! -n "$1" ] ; then
    files=(~/pictures/backgrounds/*jpg)
else
    while [ $1 ] ; do
        files+=(`echo $1/*jpg`)
        shift
    done
fi
echo $files
N=${#files}
echo $N
((N=RANDOM%N))
echo $N
wall=${files[$N]}
echo $wall
cp $wall ~/wall.jpg

此代码有时会失败,因为
RANDOM%N
可能导致零,而zsh数组索引以1开头。您应该改用
随机%N+1

您可以:

setopt ksharrays
启用基于零的索引

man zshoptions

尽可能地模拟ksh阵列处理。如果这 选项设置后,数组元素从零开始编号,即数组 不带下标的参数改为引用第一个元素 在整个阵列中,需要使用大括号来分隔子阵列 脚本(
${path[2]}'而不仅仅是
$path[2]')


如果将N硬编码为1并删除回音,会发生什么情况?同样的问题?换句话说,以这种方式失败的最短代码是什么?该代码最初在bash中。那么回声和它无关?