zsh-echo的副作用?
出于某种原因,此脚本将在结尾与所有的“echo”一起使用,但如果没有它们,$wall将是一个空字符串。这似乎真的很奇怪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
#!/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中。那么回声和它无关?