다음과 같은 간단한 스크립트가 있습니다.
#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {1..99..2}
do
echo $i
done
내가 다음을 실행하는 경우 출력 sh file.sh
:
Bash version ...
{1..99..2}
내가 다음을 실행하는 경우 출력 bash file.sh
:
Bash version 4.2.25(1)-release...
1
3
5
.
.
.
99
두 가지 쿼리가 있습니다.
-
내가 쉘을 지정하는 shabang 라인을 작성한 경우 내가 사용 여부, 그것은 bash는 실행 안
sh file.sh
나bash file.sh
? -
나는
$BASH_VERSION
sh에 의해 인식되지 않지만 for 루프의 문제점은 무엇입니까? 숫자를 인쇄하지 않는 이유는 무엇입니까?
답변
sh
Bourne 쉘은 오래되었습니다 . 동작은 POSIX 표준에 의해 지정됩니다 . 새로운 동작을 원한다면 bash
Bourne Again 쉘인을 사용하면 항상 새로운 기능이 추가됩니다. 많은 시스템에서, sh
그냥 bash
, 그리고 bash
호환성 모드에 대한 회전은 그 이름에서 실행할 때. 우분투에서 sh
이다 dash
, 데비안 Almquist 쉘.
중괄호 확장은 비교적 새로운 기능 이며 이전 bash에서도 사용할 수 없습니다. 에 없어야합니다 sh
.
shebang 행은 스크립트를 실행 파일로 호출하는 경우에만 존중됩니다.
./myscript.sh
나는 어떤 shebang이라도 스크립트를 줄 수 있고 다음을 실행하여 파이썬에서 열 수 있습니다.
python myscript.sh
유닉스와 리눅스에 대한 다음과 같은 훌륭한 질문을보십시오 :
답변
SH는 바보입니다. 아무것도 할 수 없습니다.
가장 기본적인 명령 만 알고 있습니다. 다른 일은하지 않습니다.
{1..99}을 숫자 값으로 이해할 수 없습니다. 문자열로 이해합니다.
SH / Dash는 개발되지 않았습니다. DIRE 환경에 대한 긴급 프롬프트 (대화식 모드)입니다. 그렇지 않으면 스크립팅에 정말 좋습니다.
Bash는 SH가 할 수있는 모든 작업과 최신 사용자 정의 기능 및 강력한 기능을 수행 할 수 있으므로 권장됩니다.
# 1에 대한 답으로 #!
프로그램이 직접 호출 된 경우에만 구문 분석됩니다. (에서와 같이 ./program.sh
)