bash에서 $ {GZIP_BINDIR- '/ bin'}의 의미는 무엇입니까?


13

누구든지이 명령의 의미를 설명 할 수 있습니까?

PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH

답변:


19

${GZIP_BINDIR-'/bin'}A는 bash파라미터 확장 패턴. 보낸 사람 man bash:

${parameter:-word}
              Use Default Values.  If parameter is unset or null, 
the expansion of word is substituted.  Otherwise, the  value  of parameter
is substituted.

이 부분이 있기 직전에 맨 페이지에는 (@jwodder에게 감사를 표합니다) :

Omitting the colon results in a test only for a parameter that is unset.

맨 페이지에서 알 수 있듯이 변수의 기본값이 설정됩니다 GZIP_BINDIR. 경우 GZIP_BINDIR(사용하지 않는으로 널 (null)이 아닌 이전에 설정 한 값이 :그 값이 사용됩니다), 그렇지 않으면 /bin변수의 값으로 사용됩니다 GZIP_BINDIR.

반면에 널값도 테스트하려면이 패턴 (include :)을 사용하십시오 .

${GZIP_BINDIR:-'/bin'}

그 후에 $PATH는 이전에 보유한 값으로 확장됩니다. 따라서 PATH이전에 다음을 수행 한 경우 :

/usr/sbin:/usr/bin

이제 귀하 PATH는 (고려 GZIP_BINDIR되지 않은) 것입니다 :

/bin:/usr/sbin:/usr/bin

export PATH이 것 PATH자식 프로세스를 모두 사용할 수 있습니다.


" 나는 당신이 놓친 생각 :${GZIP_BINDIR-'/bin'} 꼭 그렇지는 않습니다." ${parameter-word}맨 페이지에없는 것처럼 보이지만 유효합니다.
nyuszika7h

@ nyuszika7h Yeah..i 전에 그것을 몰랐다. 왜 이상한 이유는 맨 페이지에 포함되지 않습니다 ..
heemayl

내 컴퓨터의 bash 맨 페이지에서 섹션 바로 위의 단락 :-은 "아래에 설명 된 양식 (예 : :-)을 사용하여 하위 문자열 확장을 수행하지 않는 경우 bash는 설정되지 않았거나 null 인 매개 변수를 테스트합니다. 콜론 생략 설정되지 않은 매개 변수에 대해서만 테스트를 수행합니다. "
jwodder

부수적으로, 다음과 같이 설정 PATHexport를 단일 명령으로 결합 할 수 있습니다 .export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
Paddy Landau

8

매개 변수 확장 안에 하이픈 앞에 콜론이 ${GZIP_BINDIR-'/bin'}없습니까?

이런 종류의 구성은 거의 항상 콜론으로 작성됩니다. ${GZIP_BINDIR:-'/bin'}"$ GZIP_BINDIR이 NULL이거나 설정되어 있지 않으면 '/ bin'으로 설정하십시오."

그러나 제공 한 구문 유효하지만 드문 경우입니다. ${GZIP_BINDIR-'/bin'}(콜론 없음)은 "$ GZIP_BINDIR이 설정되지 않은 경우 '/ bin'으로 설정"을 의미합니다. 설정되었지만 (선언 된) 아무 것도 할당되지 않은 경우 (예 : NULL) 아무것도 삽입되지 않습니다.

$ GZIP_BINDIR이 설정되었지만 NULL 인 경우 변수 구문 (...} $ PATH ...) 다음 의 콜론 여전히 삽입 되지만 여기에 버그가있을 수 있습니다 . 이렇게하면 $ PATH의 시작 부분에 콜론이 추가되므로 현재 디렉토리가 먼저 검색됩니다.:

이는 현재 디렉토리에 두는 것만으로 표준 명령과 동일한 이름의 악성 프로그램을 쉽게 실행할 수있게하므로 대부분 보안 문제로 간주됩니다.

$ GZIP_BINDIR이 설정되었지만 NULL (빈) 인 경우 $ PATH를 변경하지 않고 그대로 두려면 올바른 구문은 다음과 같습니다. ${GZIP_BINDIR-'/bin:'}$PATH; export PATH

$ GZIP_BINDIR이 설정되지 않았거나 설정되었지만 NULL 인 경우 $ PATH를 변경하지 않고 그대로 두려면 올바른 구문은 다음과 같습니다. ${GZIP_BINDIR:-'/bin:'}$PATH; export PATH


2

이 명령은 PATH 변수를 업데이트합니다.

PATH실행 프로그램이있는 디렉토리의 집합을 지정하는 환경 변수입니다.

PATH="${GZIP_BINDIR-'/bin'}:$PATH";

GZIP_BINDIR이전 PATH로 종료하면 다른 변수의 값을 추가하고 그렇지 않으면 / bin을 대신 사용하여 PATH에 추가하십시오.

export PATH

수출은 모든 자식 프로세스에 사용할 수있는 경로를 설정하는 데 사용 및 읽기 서브 쉘되어 에 대한 자세한 내용은

이것은 정적이 아니며 쉘을 종료하면 느슨해집니다.

이 PATH 편집을 영구적으로 만들려면 다음 행을 .bashrc

gedit .bashrc

그리고 라인을 추가

export PATH="${GZIP_BINDIR-'/bin'}:$PATH"

그런 다음 명령을 실행하십시오.

source .bashrc

GZIP_BINDIR은 변수입니다
Maythux

옳지 않은 것은 무엇입니까? 아니에요? 광산도
하향 투표 됨

왜 downvoting ?!
Maythux
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.