위치 매개변수에 대해 알아보려고 합니다. 아무것도 작동하지 않는 것 같았고 실제로 작동하는지 확인하기 위해 echo를 사용하여 약간의 작업을 수행하기로 결정했지만 작동하지 않았습니다. 누구든지 이유를 설명할 수 있나요? (여기서 셔뱅 라인과 코멘트는 생략하고 바로 본론으로 들어가겠습니다)
if [[ -e $1 ]]; then
echo $#
echo $1
fi
스크립트 이름과 하나 이상의 매개변수를 입력하면 아무것도 반환되지 않습니다. 그러나 다음은 예상대로 모든 것을 반환합니다. 정말 압도당했어요.
if [[ -e $0 ]]; then
echo $#
echo $1
fi
$0 이외의 매개변수는 왜 인식되지 않습니까?
답변1
Bash 매뉴얼 페이지:
CONDITIONAL EXPRESSIONS
Conditional expressions are used by the [[ compound command
and the test and [ builtin commands to test file attributes
and perform string and arithmetic comparisons.
-e file
True if file exists.
따라서 기존 파일과 일치하지 않는 문자열을 첫 번째 인수로 전달하면 [[ -e $1 ]]
false가 됩니다.
그러나 $0
일반적으로 쉘이나 스크립트의 이름이 포함되어 있으므로 [[ -e $0 ]]
정품일 가능성이 더 높습니다.
(그러나 모든 경우에 해당되는 것은 아닙니다. 대화형 셸은 로그인 셸로 시작될 수 있으며 대시 $0
(예: -/bin/bash
) 및 이와 유사한 항목이 /bin/sh -c '...' foo bar
로 설정되어 있습니다 $0
. foo
거기에 원하는 것을 넣을 수 있습니다.
아마도 원하는 테스트는 다음과 같습니다 -n
.
string
-n string
True if the length of string is non-zero.
그래서, [[ -n $1 ]]
아니면 그냥 [[ $1 ]]
.