`구문 오류: 배열을 생성할 때 "("예기치 않은`

`구문 오류: 배열을 생성할 때 "("예기치 않은`

두 개의 (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.shshbash

셸에는 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).

관련 정보