명령이 인수를 제공하지 않는지 확인하는 방법은 무엇입니까?

명령이 인수를 제공하지 않는지 확인하는 방법은 무엇입니까?

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

답변1

명령에 인수가 제공되지 않았는지 확인하려면 $#변수 값을 확인하십시오.

if [ $# -eq 0 ]; then
    >&2 echo "No arguments provided"
    exit 1
fi

($*선호하지 않음) 그 다음에,

if [ "$*" == "" ]; then
    >&2 echo "No arguments provided"
    exit 1
fi

몇 가지 설명:

두 번째 접근 방식은 위치 매개변수 확장에서 *확장이 1부터 위치 매개변수까지 시작되기 때문에 권장되지 않습니다. 큰따옴표 내에서 확장이 발생하면 IFS 특수 변수의 첫 번째 문자로 구분된 각 인수의 값을 사용하여 단일 단어로 확장됩니다. 이는 문자열이 구성됨을 의미합니다. 그래서 추가 오버헤드가 발생합니다.

다른 한편으로는 #위치 매개변수의 수까지 확장됩니다.

예:

$ command param1 param2

여기,

IFS가 설정되지 않은 경우 값은 $#2이고 값은 $*문자열 "param1 param2"(따옴표 제외)입니다. IFS가 설정되지 않으면 매개변수가 공백으로 구분되기 때문입니다.

자세한 내용은 man bash다음 제목의 기사를 참조하세요.특수 매개변수

답변2

특정 매개변수가 누락된 경우에만 관심이 있는 경우,매개변수 대체중대하다:

#!/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

답변3

이것은 당신이 논쟁의 여지가 없다는 것을 아는 방법 중 하나입니다.

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

관련 정보