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.