두 개의 (Debian) Linux 서버가 있습니다. 쉘 스크립트를 작성 중입니다.
첫 번째에서는 배열을 만들었습니다.
#!/bin/bash
target_array=(
"/home/user/direct/filename -p123 -r"
)
좋은 결과. 하지만 다른 서버에서 실행하면 다음과 같은 결과가 나타납니다.
Syntax error: "(" unexpected
내가 아는 한 두 서버는 모두 동일합니다. 왜 이것이 작동하지 않는지 설명할 수 있는 사람이 있습니까?
터미널에 직접 입력해도 괜찮나요?
내가 이것을 실행하면
sh scriptname.sh
오류가 발생하지만 실행하면
./scriptname.sh
문제 없을 것 같습니다. 차이점은 무엇입니까?
답변1
사용하면 첫 번째 줄에 와 함께 적용 ./scriptname.sh
됩니다 . 하지만 사용하면 대신 실행됩니다 ./bin/bash
#!
sh scriptname.sh
sh
bash
셸에는 sh
배열을 생성하는 구문이 없지만 Bash에는 사용자가 사용하는 구문이 있습니다.
답변2
run은 ./scriptname.sh
파일의 첫 번째 줄을 읽고 "/bin/bash"를 실행해야 하는지 확인하고 나머지 스크립트를 인터프리터에 전달하는 반면, 실행은 sh scriptname.sh
파일을 사용자의 표준 셸(예: Ash)에 전달합니다. ) 및 기타 인터프리터는 Bash처럼 배열을 지원하지 않습니다.
답변3
with 를 사용하면 sh scriptname.sh
실행 중이지만 sh
반드시 를 사용하는 것은 아닙니다 bash
. sh --version
두 컴퓨터에서 비교해 보세요 . 및/또는 dpkg -S $(which sh)
.