정수 표현식을 생성하는 파이프라인 명령 세트가 있습니다. 예를 들어 (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
산술 확장은 내부적으로 발생 하지만$((...))
명령 대체는 발생합니다. 명명된 명령 (변수 값의 첫 번째 단어)이 $(...)
없기 때문에 쉘이 명령 대체에서 해당 명령을 사용하려고 하면 오류 메시지가 표시됩니다.(1
TEST
$TEST
당신은하고 싶을 수도 있습니다
expression='(1 +(0x1f+0x02))'
echo "$(( "$expression" ))"
4.4 이전 버전의 경우 bash
내부 큰따옴표 세트를 제거하십시오. 버전 4.4는 bash
산술 확장에서 큰따옴표로 묶인 식별자의 확장을 허용하는 최초의 제품입니다 .