Bash에서 정수 표현식 평가

Bash에서 정수 표현식 평가

정수 표현식을 생성하는 파이프라인 명령 세트가 있습니다. 예를 들어 (1 +(0x1f+0x02)) 표현식을 다음과 같이 래핑하여 평가(결과 값 가져오기)할 수 있는 것처럼 보입니다 $().

$ echo $((1 +(0x1f+0x02)))
34

단일 명령으로 작동시키는 데 관심이 있어서 에서 전체 명령 시리즈를 파이핑하려고 시도했지만 $()bash는 표현식을 평가할 수 없는 것 같습니다. 이 조각은 내가 보고 있는 문제를 재현할 수 있습니다.

$ TEST="(1 +(0x1f+0x02))"

$ echo "$TEST"
(1 +(0x1f+0x02))

$ echo $($TEST)
bash: (1: command not found

내가 여기서 무엇을 놓치고 있는지 잘 모르겠습니다.

답변1

산술 확장은 내부적으로 발생 하지만$((...)) 명령 대체는 발생합니다. 명명된 명령 (변수 값의 첫 번째 단어)이 $(...)없기 때문에 쉘이 명령 대체에서 해당 명령을 사용하려고 하면 오류 메시지가 표시됩니다.(1TEST$TEST

당신은하고 싶을 수도 있습니다

expression='(1 +(0x1f+0x02))'

echo "$(( "$expression" ))"

4.4 이전 버전의 경우 bash내부 큰따옴표 세트를 제거하십시오. 버전 4.4는 bash산술 확장에서 큰따옴표로 묶인 식별자의 확장을 허용하는 최초의 제품입니다 .

관련 정보