![명령이 인수를 제공하지 않는지 확인하는 방법은 무엇입니까?](https://linux55.com/image/19596/%EB%AA%85%EB%A0%B9%EC%9D%B4%20%EC%9D%B8%EC%88%98%EB%A5%BC%20%EC%A0%9C%EA%B3%B5%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%EC%A7%80%20%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
비어 있는지 확인하는 방법은 무엇입니까 $*
? 즉, 명령에 인수가 제공되지 않았는지 어떻게 확인합니까?
답변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