표현식과 변수

표현식과 변수

스크립트를 어떻게 실행합니까? ./script.sh 1 \* 2

마지막으로:./script.sh 1 '*' 2

내 스크립트는 다음과 같습니다.

args="$@" # the first line of the script
result=$(($args))
echo "$args = $result"

유효한가요?: 예

내가 달성하고 싶은 것:expr대신 사용하고 싶어요$((...))

그것은 다음과 같습니다:

args="$@" # the first line of the script
result=`expr $args`
echo "$args = $result"

와 같은 입력 매개변수에는 제대로 작동하지만 1 + 2별표(별표) 기호(또는 )에 대해서는 제대로 작동하지 않습니다. expr: syntax error왜 이것이 예상대로 작동하지 않는지, 어떻게 해결해야 하는지 알고 싶습니다.

다음과 같은 스크립트는 작동합니다. 변수에 할당할 때 무슨 일이 일어나는지 expr "$@"이해가 되지 않습니다 .$@

답변1

스크립트가 작동하지 않는 이유

이제 스크립트는 와일드카드 확장을 수행하여 와일드카드 문자를 현재 작업 디렉터리의 모든 파일로 바꿉니다. 스크립트 상단에 옵션을 추가 하면 set -x이는 분명해집니다 .

$ ./expr_script.sh 2 '*' 2
+ args='2 * 2'
++ expr 2 -23.txt add_location_name.py expr_script.sh kusalananda 'Movie A (2014)' 'Movie B (2016)' one.test popup_script.sh somefile2.txt somefile.txt somethings texts three.test turnSignal.v two.test 2
expr: syntax error
+ result=
+ echo '2 * 2 = '
2 * 2 = 

그것을 고치는 방법

산술 스크립트에서 파일 이름을 확장할 필요가 없으므로 set -f전역 확장을 비활성화하는 옵션을 사용할 수 있습니다.

#!/bin/bash
set -f
##set -x
args="$@" # the first line of the script
result=$(expr $args)
echo "$args = $result"

이것은 작동합니다:

$ ./expr_script.sh 2 '*' 2
2 * 2 = 4

관련 정보