Bash 스크립트에 전달 된 인수 수는 어떻게 찾습니까?
이것이 내가 현재 가지고있는 것입니다 :
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
이 작업을 수행하는 다른 (더 나은) 방법이 있습니까?
Bash 스크립트에 전달 된 인수 수는 어떻게 찾습니까?
이것이 내가 현재 가지고있는 것입니다 :
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
이 작업을 수행하는 다른 (더 나은) 방법이 있습니까?
답변:
인수의 수는 $#
자세한 내용은이 페이지에서 검색하십시오. http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
argc
C는 같은 언어로 $#
될 것입니다 0
스크립트에 전달 된 인수가없는 경우 1
등 하나 개의 인수가있는 경우
#!/bin/bash
echo "The number of arguments is: $#"
a=${@}
echo "The total length of all arguments is: ${#a}: "
count=0
for var in "$@"
do
echo "The length of argument '$var' is: ${#var}"
(( count++ ))
(( accum += ${#var} ))
done
echo "The counted number of arguments is: $count"
echo "The accumulated length of all arguments is: $accum"
bc
, 또는 다른 것을 사용해야 합니다 (ksh93 및 zsh도 소수 수학을 수행 할 수 있음). 코드에는 일부 변수에 대한 달러 기호가 포함되어 있지만 다른 변수에는 포함되지 않습니다. 사용 여부에 대해 일관성을 유지해야합니다. 내부 (())
는 필요하지 않습니다. 그러나 그들은 echo
진술에 있습니다.
원래 참조를 추가하려면 다음을 수행하십시오.
당신은 특수 매개 변수에서 인수의 수를 얻을 수 있습니다 $#
. 값이 0이면 "인수 없음"을 의미합니다. $#
읽기 전용입니다.
shift
인수 처리 와 함께 사용하면 $#
Bash Builtin shift
이 실행될 때마다 특수 매개 변수 가 감소합니다 .
섹션 3.4.2 특수 매개 변수의 Bash Reference Manual 을 참조 하십시오 .
"쉘은 여러 매개 변수를 특별히 취급합니다.이 매개 변수 는 "
키워드 $ #에 대한이 섹션에서 "10 진수의 위치 매개 변수 수로 확장됩니다."
아래는 쉬운 것입니다-
고양이 countvariable.sh
echo "$@" |awk '{for(i=0;i<=NF;i++); print i-1 }'
출력 :
#./countvariable.sh 1 2 3 4 5 6
6
#./countvariable.sh 1 2 3 4 5 6 apple orange
8
echo "$@" | awk '{print NF}'
i+1
을 변수에 저장합니다i
.