~에서https://unix.stackexchange.com/a/94200/674
위치 인수가 없으면($#은 0) "$@"는 다음으로 확장됩니다.아무것도 없다(아니요빈 문자열, 하지만0개 요소를 포함하는 목록)
그렇다면 빈 문자열은 요소가 0개인 목록과 어떻게 다르게 동작할까요?
"0개의 요소를 포함하는 목록"은 "0개의 요소를 포함하는 배열"을 의미합니까? 나는 bash에 개념이 없다고 생각합니다 list
.
"없음"이 반드시 "목록"이나 배열이 아닌 것을 의미할 수 있나요?
답변1
예, 대부분의 쉘에는 목록(변수용) 개념이 없습니다.
이는 정의된 콘텐츠 유형(문자열 또는 숫자와 별개)이 아닙니다.
그러나 명령의 인수는 목록입니다.
이것은 매우 특별한 데이터 유형으로, 목록으로만 표현됩니다 "$*"
. "$@"
그러나 차이점이 있습니다.
$ set -- one two t33
$ printf '<%s> ' "$*" ; echo
<one two t33>
$ printf '<%s> ' "$@" ; echo
<one> <two> <t33>
$ for s; do printf '<%s>' "$s" ; done; echo
<one><two><t33>
설명 후, 인용문은 요소가 0개인 매개변수 목록이 요소가 없는 목록과 동일하다는 것을 의미합니다.
즉, 목록이 사라집니다(인쇄할 요소가 없음).
$ set -- $ echo $# 0 $ printf '<%s>' "$@" ; echo <> $ for s in "$*"; do echo "<a>" ; done <a> $ for s in "$@"; do echo "<a>" ; done $
최종 코드는 "빈"(널) 문자열도 아닌 "아무것도" 인쇄하지 않습니다.
귀하의 질문에 관해서 :
"없음"이 반드시 "목록"이나 배열이 아닌 것을 의미할 수 있나요?
아무것도 아님"예(빈) "목록"이어야 합니다. 그러나 "빈 문자열"이 존재합니다.
답변2
기본적으로 $#
몇 가지 매개변수가 제공됩니다. 0은 숫자이기도 하며, 매개변수가 제공되지 않았음을 나타냅니다. $@
그러나 확장이 비어 있으므로 평가할 수 없습니다. (예: 매개변수가 있는지 확인) 스크립트에서 직접 시도해보고 어떻게 작동하는지 확인하세요.
제공된 인수 수를 확인하려는 경우(예: 스크립트에서 계산)필수 매개변수 3개제안 - 당신은 할 것입니다 $#
.
실제로 매개변수를 사용하여 작업을 수행해야 하는 경우 를 사용합니다 $@
.
다음 예를 참조하세요.TLDP 내부 변수