위치 매개변수가 작동하지 않습니다. $1, $2 등에 액세스할 수 없습니다.

위치 매개변수가 작동하지 않습니다. $1, $2 등에 액세스할 수 없습니다.

위치 매개변수에 대해 알아보려고 합니다. 아무것도 작동하지 않는 것 같았고 실제로 작동하는지 확인하기 위해 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 ]].

관련 정보