두 개의 (데비안) 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)
.