내가 왜 받나요?
./6_sum_square_difference.sh: 11: ./6_sum_square_difference.sh: Illegal number: {1..3}
~을 위한
#!/bin/sh
summing () {
the_total=0
num_in=$1
for one_num in {1..$num_in}
do
printf "aaaa\n"
the_total=$((the_total+one_num)) # <-- Line 11
done
}
summing 3
if [[ $the_total == 6 ]]; then
echo "equa to 6 "$the_total
else
echo "NOT equal to 6"
fi
printf "total= "$the_total
답변1
{1..$num_in}
크시즘/즈시즘이에요. 다음과 같이 작성해야 합니다.
`seq $num_in`
{1..3}
참고: bash는 주석에서 1_CR과 같은 코드를 지원하지만 {1..$num_in}
중괄호 확장이 인수 대체보다 우선하므로 bash에서는 작동하지 않습니다. 따라서 매개변수 확장이 먼저 수행되기 때문에 작동하는 ksh93 또는 zsh에서 가져온 것일 수 있습니다.
답변2
숫자 시퀀스로 확장되지 않기 때문에 등 {1..$num_in}
의 리터럴 문자열로만 확장됩니다 . 따라서 스크립트는 산술 확장을 수행하고 잘못된 숫자를 확인하고 오류 메시지를 인쇄합니다.{1..1}
{1..2}
shebang을 사용하는 경우 스크립트를 실행하기 위해 연결하는 셸이 있는 #!/bin/sh
시스템에 따라 다릅니다 . /bin/sh
따라서 오류 메시지는 셸에 따라 다를 수 있습니다.
그리고 dash
:
$ dash test.sh
aaaa
test.sh: 74: test.sh: Illegal number: {1..3}
그리고 bash
:
$ bash test.sh
aaaa
test.sh: line 74: {1..3}: syntax error: operand expected (error token is "{1..3}")
NOT equal to 6
total= 0
그리고 :pdksh
mksh
$ pdksh test.sh
aaaa
test.sh[77]: {1..3}: unexpected '{'
NOT equal to 6
total= 0
그리고 yash
:
$ yash test.sh
aaaa
yash: arithmetic: `{1..3}' is not a valid number
posh
분할 오류를 통해서도:
$ posh test.sh
aaaa
test.sh:77: {1..3}: unexpected `{'
Segmentation fault
이 스크립트는 다음 zsh
과 함께 사용됩니다 ksh93
.
$ zsh test.sh
aaaa
aaaa
aaaa
equa to 6 6
total= 6