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
argcC는 같은 언어로 $#될 것입니다 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.