대부분의 Bash 변수(BASH_VERSINFO, OLDPWD, HOSTTYPE)가 "명령을 찾을 수 없음"을 반환하는 이유는 무엇입니까?

대부분의 Bash 변수(BASH_VERSINFO, OLDPWD, HOSTTYPE)가 "명령을 찾을 수 없음"을 반환하는 이유는 무엇입니까?

BASH 변수 목록을 많이 찾았습니다.https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html

설명에 따르면,

이러한 변수는 Bash에서 설정하거나 사용하지만 다른 쉘에서는 일반적으로 이를 특별히 처리하지 않습니다.

첫 번째 변수는,

BASH: 현재 Bash 인스턴스를 실행하는 데 사용되는 전체 경로 이름입니다.

하지만 BASH터미널에 입력 하면bash: BASH: command not found

echo $0을 사용하고 있음을 확인할 수 있습니다 bash.

마찬가지로, 명령을 실행하면 BASH_VERSINFO명령 설명에 다음과 같이 나와 있지만 동일한 출력이 표시됩니다.

해당 멤버가 이 Bash 인스턴스에 대한 버전 정보를 보유하는 읽기 전용 배열 변수(배열 참조)입니다. 배열 멤버에 할당되는 값은 다음과 같습니다.

BASH_VERSINFO[0] 주 버전 번호(릴리스 버전)입니다.

BASH_VERSINFO[1] 부 버전 번호(버전)입니다.

BASH_VERSINFO[2] 패치 수준입니다.

BASH_VERSINFO[3] 빌드 버전입니다.

BASH_VERSINFO[4] 릴리스 상태(예: 베타1).

BASH_VERSINFO[5] MACHTYPE의 값입니다.

예를 들어 일부 변수는 작동합니다 hostname.pwd

답변1

변수를 직접 입력하면 쉘은 입력한 내용을 명령으로 해석하고 $PATH 변수에서 동일한 이름을 가진 항목을 검색합니다. $PATH에 BASH 및 BASH_VERSINFO라는 항목이 없기 때문에 "명령을 찾을 수 없음" 오류 메시지가 나타납니다. 반면에 발견한 대로 이는 유효한 명령입니다 pwd.hostname

echo대신 변수(일반적 으로 둘 다 쉘에 내장되어 있음) 를 인쇄하는 명령을 실행 printf하고 검사하려는 변수를 명령에 대한 인수로 제공해야 합니다. 명령 이름은 일반적으로 소문자로만 구성되는 반면, 쉘 환경 변수는 일반적으로 대문자로만 구성됩니다.

언급한 변수의 값을 표시하려면 다음을 시도하십시오.

$ echo "$BASH"
/bin/bash
$ for i in {0..4}; do printf "%d\t%s\n" "$i" "${BASH_VERSINFO[$i]}"; done
0   4
1   4
2   12
3   1
4   release

배열 변수를 인쇄하려면 "${ARR_NAME[$index]}" 구문을 사용하세요. Bash 인덱싱은 0부터 시작됩니다. 일반적으로 원치 않는 동작을 피하기 위해 변수(배열 포함)를 큰따옴표로 묶어야 합니다(따옴표 생략은 아래와 같이 분할 글롭 연산자와 동일합니다).여기).

답변2

pwd

명령이다.

echo $BASH

하지만

BASH

아니요

관련 정보