답변:
명령에 제공된 인수가 없는지 확인하려면 $#
variable의 값을 확인한 다음
if [ $# -eq 0 ]; then
echo "No arguments provided"
exit 1
fi
$*
( 바람직하지 않은 ) 을 사용하려면
if [ "$*" == "" ]; then
echo "No arguments provided"
exit 1
fi
몇 가지 설명 :
두 번째 접근 방식은 위치 매개 변수 확장이 위치 매개 변수 확장 *
부터 시작하여 위치 매개 변수로 확장되기 때문에 바람직하지 않습니다 . 큰 따옴표 내에서 확장이 발생하면 각 매개 변수의 값이 IFS 특수 변수의 첫 문자로 구분되어 단일 단어로 확장됩니다. 이는 문자열이 구성되었음을 의미합니다. 따라서 추가 오버 헤드가 있습니다.
반면 #
에 위치 매개 변수의 수로 확장됩니다.
예:
$ command param1 param2
이리,
의 값은 $#
2이고 값은 $*
IFS가 설정되지 않은 경우, (따옴표없이) 문자열 "PARAM1의 PARAM2"입니다. IFS가 설정되지 않은 경우 매개 변수는 공백으로 구분됩니다.
자세한 내용은 Special Parametersman bash
라는 주제를 읽으십시오.
[ $# -eq 0 ]
가장 일반적인 형태의 IME입니다. "$#"
비어있을 수있는 경우가 있습니다. 비어있는 단일 인수가 있거나 비어있는 여러 인수가 있고 $IFS
비어있는 경우입니다.
"$*"
표현은 또한 평가합니다 ""
하나의 경우 ""
매개 변수가 전달되었다. 그러나 대부분의 경우 어쨌든 신경 쓰지 않을 것입니다.
bash
. sh
스크립트를 실행하는 데 사용 하고 있습니다. AFAIK ==
는에서만 유효합니다 bash
.
이것은 당신이 어떤 논쟁을하지 않았다는 것을 알 수있는 방법 중 하나입니다
NO_ARGS=0
if [ $# -eq "$NO_ARGS" ]; then
{do something}
fi
if ! (($#)); ...
, 또는if (($# == 0)); ...
, 또는if [ $# -eq 0 ]; ...
,! (($#)) && ...
또는(($#)) || ...