2010-06-01 5 views
2

어떤 이유로이 스크립트는 모든 'echo'가 끝나면 작동하지만 $ wall은 빈 문자열입니다. 이것은 정말 이상한 행동처럼 보입니다. RANDOM%N가 제로가 발생할 수 있으며, zsh을 배열 인덱스 대신 RANDOM%N+1를 사용해야합니다 1. 시작하기 때문에zsh 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 
+0

N을 1로 하드 코드하고 에코를 제거하면 어떻게됩니까? 같은 문제? 즉,이 방법으로 실패 할 수있는 가장 짧은 코드는 무엇입니까? – barrycarter

답변

4

이 코드는 종종 실패합니다. 당신이 할 수있는

+0

그 비트는 원래 bash에있었습니다. 그래서 에코는 그것과 관련이 없습니다. – 2ck

1

:

setopt ksharrays 

제로 인덱싱을 활성화합니다. man zshoptions 가입일

:

에뮬레이션의 KSH 어레이 최대한 가깝게 처리. 이 옵션을 설정하면 배열 요소의 번호가 0에서 배열 번호가 배열 하위 요소가없는 매개 변수는 전체 배열의 대신에 스크립트 (${path[2]}' rather than just $ path [2])를 구분해야합니다. ').