질문
몇 가지 다른(선택적) 명령줄 인수를 허용하는 스크립트가 있습니다. 특정 매개변수의 경우 값이 "적게" 발생하지만 그 이유는 알 수 없습니다.
배쉬 코드
while getopts ":d:f:p:e:" o; do
case "${o}" in
d)
SDOMAIN=${OPTARG}
;;
f)
FROM=${OPTARG}
;;
p)
PAGER=${OPTARG}
;;
e)
DESTEXT=${OPTARG}
;;
*)
show_usage
;;
esac
done
source "./utils.sh"
test #test includes
echo "$SDOMAIN is the sdomain"
echo "$FROM is the from"
echo "$PAGER is the pager"
echo "$DESTEXT is the extension"
exit
산출
스크립트를 실행하면 다음과 같이 표시됩니다.
lab-1:/tmp/jj# bash mssp.sh -d testdomain.net
Utils include worked!
testdomain.net is the sdomain
is the from
less is the pager
is the extension
왜 호출기에서 "더 적은" 값이 나오는지 이해가 되지 않습니다. 빈 문자열이 나타날 것으로 예상됩니다. 내 실수를 보면 알려주세요. 나는 이것을 너무 오랫동안 지켜보고 있었다.
답변1
스크립트는 PAGER를 설정하지 않지만 현재 환경에서 변수를 내보낼 수 있습니다 declare -p PAGER
.
스크립트에서 다른 변수 이름을 사용하는 것이 좋습니다. 이것이 일반적으로 자신의 변수에 대문자 변수를 사용하지 않는 것이 권장되는 이유입니다.
답변2
PAGER
일반적으로 사용되는 환경 변수(예 EDITOR
: )입니다. 매뉴얼 페이지에 언급된 몇 가지 예는 다음과 같습니다.
남성(우선순위임에도 불구하고 MANPAGER
):
-P pager, --pager=pager
사용할 출력 호출기를 지정합니다. 기본적으로 이 옵션을man
사용하면 환경 변수가 재정의되고, 결과적으로 환경 변수가 재정의됩니다.pager
$MANPAGER
$PAGER
자식:
-p, --paginate
표준 출력이 터미널인 경우 모든 출력을 터미널로 파이프합니다less
(또는 설정된 경우). 이는 구성 옵션을 재정의합니다(아래 "구성 메커니즘" 섹션 참조).$PAGER
pager.<cmd>
스크립트가 출력을 파이프하려는 프로그램의 이름을 보유하는 것 이외의 다른 의미로 변수를 사용하는 경우 명확성을 위해 다른 이름을 사용하는 것이 좋습니다. 그럼에도 불구하고 주변 환경이 들어올 수 있다는 점을 기억하세요.어느변수이므로 변수가 비어 있는지 확인하려면 명시적으로 빈 문자열을 할당해야 합니다. 또는 unset
설정을 해제하려는 경우.
이것은 당신이 내려야 할 결정이지만. 일부 사용자는 환경을 통해 구성 항목을 전달할 수 있는 가능성을 높이 평가할 수 있습니다.