Bash 스크립트에 전달 된 인수 수는 어떻게 찾습니까?


182

Bash 스크립트에 전달 된 인수 수는 어떻게 찾습니까?

이것이 내가 현재 가지고있는 것입니다 :

#!/bin/bash
i=0
for var in "$@"
do
  i=i+1
done

이 작업을 수행하는 다른 (더 나은) 방법이 있습니까?


4
이 코드는 인수가 있으면 리터럴 문자열 i+1을 변수에 저장합니다 i.
Philipp

답변:



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

내가하려고했던 것도 나에게 도움이되었다. #! / bin / bash count = 0 sum = "$ @"의 var에 대해 avg = 0 = ((sum + = $ var)) ((count ++)) done ((avg = sum / $ count)) echo " 숫자의 합은 다음과 같습니다. $ sum "echo"수의 평균은 $ avg "입니다. 이것은 수많은 수의 인수를 얻고 수학 (피연산자를 편집 할 수 있음)을 수행하는 데 도움이됩니다. Dennis Williamson에게 감사드립니다. 누군가에게 유용 할 수 있기 때문에 코드에 게시하고 있습니다.
kaan yılmaz

1
@ kaanyılmaz : 그것의 유일한 문제는 Bash는 정수 산술만한다는 것입니다. 소수를 원하면 AWK bc, 또는 다른 것을 사용해야 합니다 (ksh93 및 zsh도 소수 수학을 수행 할 수 있음). 코드에는 일부 변수에 대한 달러 기호가 포함되어 있지만 다른 변수에는 포함되지 않습니다. 사용 여부에 대해 일관성을 유지해야합니다. 내부 (())는 필요하지 않습니다. 그러나 그들은 echo진술에 있습니다.
추후 공지가있을 때까지 일시 중지되었습니다.

나는 리눅스에별로 좋지 않다. 필요에 따라 코드를 수정했다. 기본적으로 코드입니다
kaan yılmaz

코드 주셔서 감사합니다, 그것은 매우 좋습니다.
Smeterlink

12

원래 참조를 추가하려면 다음을 수행하십시오.

당신은 특수 매개 변수에서 인수의 수를 얻을 수 있습니다 $#. 값이 0이면 "인수 없음"을 의미합니다. $#읽기 전용입니다.

shift인수 처리 와 함께 사용하면 $#Bash Builtin shift이 실행될 때마다 특수 매개 변수 가 감소합니다 .

섹션 3.4.2 특수 매개 변수의 Bash Reference Manual참조 하십시오 .

  • "쉘은 여러 매개 변수를 특별히 취급합니다.이 매개 변수 "

  • 키워드 $ #에 대한이 섹션에서 "10 진수의 위치 매개 변수 수로 확장됩니다."


-1

아래는 쉬운 것입니다-

고양이 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

3
다음과 같이 작성 될 수 있습니다echo "$@" | awk '{print NF}'
user000001

-6

그 값은 변수에 포함되어 있습니다 $#


4
사실 4 살짜리와 똑같은 (그러나 정확한) 대답은 사실이지만, 당신의 대답은 틀 렸습니다.$#
nachteil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.