2014-07-14 2 views
1

내가 배열의 몇 가지에 대한 루프를 만들려고 해요하지만 난이 오류를 얻을 : 나는 '배쉬 루프 2 개 배열

sourceFiles[1]=/media/jon/ACER/Documents\ and\ Settings/Laura/Documents/Shared 
destinationFiles[1]=/media/jon/My\ Book/Shared 

for index in ${!sourceFiles[@]} 
do 
    sudo rsync -a --delete ${sourceFiles[$index]} ${destinationFiles[$index]} 
done 

:

./bash.sh: 3: ./bash.sh: source[0]=/media/jon/my\ directory/: not found 

이처럼 내 코드가 어떻게 생겼는지입니다 어떤 파일을 bash로 처리 할 것인가? 그리고 이것은 단순한 루프를하는 것이 그렇게 어렵다는 사실을 매우 실망스럽게 만든다.

업데이트 나는 정답 당 상단에 #!/bin/bash이 필요했습니다.

+0

은 [맞춤법 검사]를 통해 스크립트를 실행 (http://www.shellcheck.net/). 개인적으로 인덱스를 사용하려면 [this syntax] (http://stackoverflow.com/a/49114/3076724)가 더 간단 할 것이라고 생각합니다. – BroSlow

+0

@BroSlow 감사합니다. 나는 그것을 뒤집어 놓을 것이고, 단지'map2' 구문을 사용할 수 있다면 더 좋을 것입니다! 또는 단지'range (0..4) .map'. – Jon49

답변

2

코드는 괜찮아 보입니다. 나는 bash를 사용하지 않고 있다고 생각한다. ("not found"는 bash 에러 메시지가 아니다.) 아마도 /bin/sh을 사용하고 있습니까? 많은 시스템에서 그것은 최소한의 POSIX 셸이 아니라 bash입니다.

POSIX 셸은 sourceFiles[1]=...을 할당으로 인식하지 않으므로 명령으로 실행합니다. 따라서 "찾을 수 없음"오류입니다. sudo는 라인에 큰 따옴표에 변수를 둘러싸는

2

시도 :

sudo rsync -a --delete "${sourceFiles[$index]}" "${destinationFiles[$index]}" 
+0

당신은 둘 다 맞았지만 전에 제안한 것을 시도했지만 근본적인 문제는 pdw의 대답이었습니다. 당신의 도움을 주셔서 감사합니다. – Jon49