`구문 오류 : 배열을 만들 때“(”예기치 않은 것 같이 배열을 만듭니다. #!/bin/bash target_array=(

두 개의 (데비안) Linux 서버가 있습니다. 쉘 스크립트를 작성 중입니다.

첫 번째 배열에서는 다음과 같이 배열을 만듭니다.

#!/bin/bash
target_array=(
    "/home/user/direct/filename -p123 -r"
)

잘 작동합니다. 그러나 다른 서버에서 이것을 실행하면 다음과 같은 결과가 나타납니다.

Syntax error: "(" unexpected

내가 알 수있는 한 두 서버가 동일합니다. 왜 이것이 작동하지 않는지 누군가가 밝힐 수 있습니까?

터미널에 직접 입력하면 괜찮습니다 ??


내가 그것을 실행할 때 나타납니다

sh scriptname.sh

오류가 발생하지만 다음과 같이 실행하면

./scriptname.sh

괜찮은 것 같습니다. 차이점이 뭐야?



답변

사용할 때는 첫 번째 줄에서 ./scriptname.sh/bin/bash같이로 실행 됩니다 #!. 하지만 당신이 사용하는 경우 sh scriptname.sh는 실행 sh하지 bash.

sh쉘은 배열을 생성 할 구문이 없지만, 배쉬는 사용되는 구문이 있습니다.


답변

실행 ./scriptname.sh하면 파일의 첫 번째 줄을 읽고 ʻ / bin / bash ‘를 실행하고 나머지 스크립트를 인터프리터에 sh scriptname.sh전달해야 하며 실행 하면 파일이 사용자의 표준 쉘 (예 : Ash)에 전달됩니다. 다른 인터프리터가 Bash처럼 배열을 지원하지 않는 경우가 있습니다.


답변

을 사용하면 반드시을 sh scriptname.sh(를) 사용할 sh필요는 없습니다 bash. sh --version두 기계를 비교해보십시오 . 그리고 / 또는과 dpkg -S $(which sh).


답변