명령에 제공된 매개 변수가 없는지 확인하는 방법


73

$*비어 있는지 어떻게 확인 합니까? 즉, 명령에 인수가 제공되지 않았는지 확인하는 방법은 무엇입니까?

답변:


110

명령에 제공된 인수가 없는지 확인하려면 $#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 라는 주제를 읽으십시오.


5
또는 if ! (($#)); ..., 또는 if (($# == 0)); ..., 또는 if [ $# -eq 0 ]; ..., ! (($#)) && ...또는(($#)) || ...
nicerobot

7
[ $# -eq 0 ]가장 일반적인 형태의 IME입니다. "$#"비어있을 수있는 경우가 있습니다. 비어있는 단일 인수가 있거나 비어있는 여러 인수가 있고 $IFS비어있는 경우입니다.
Gilles

1
"$*"표현은 또한 평가합니다 ""하나의 경우 ""매개 변수가 전달되었다. 그러나 대부분의 경우 어쨌든 신경 쓰지 않을 것입니다.
manatwork

나는 그것이 == 대신 =이어야한다고 생각합니다 ... 현재 예기치 않은 연산자 오류가 발생하고 =로 변경하면 문제가 해결됩니다.
글쎄 실제로

@Charlotte 그것은 당신이 사용하고 있지 않음을 의미합니다 bash. sh스크립트를 실행하는 데 사용 하고 있습니다. AFAIK ==는에서만 유효합니다 bash.
Sachin Divekar

14

특정 인수가 누락 된 경우에만 베일 링에 관심이 있다면 매개 변수 대체 가 좋습니다.

#!/bin/bash
# usage-message.sh

: ${1?"Usage: $0 ARGUMENT"}
#  Script exits here if command-line parameter absent,
#+ with following error message.
#    usage-message.sh: 1: Usage: usage-message.sh ARGUMENT

-4

이것은 당신이 어떤 논쟁을하지 않았다는 것을 알 수있는 방법 중 하나입니다

NO_ARGS=0
if [ $# -eq "$NO_ARGS" ]; then
    {do something}
fi

5
그것은 5 년 전에 받아 들여진 대답이 무엇을했는지에 대한 복잡한 방법 인 것 같습니다.
Jeff Schaller
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.