백틱을 $ () 작동하지 않는 것으로 교체 오래된 스크립트가

업데이트하려는 오래된 스크립트가 있습니다. 일부 코드는 다음과 같이 요약됩니다.

 export X=`(echo "abc"; echo "def")`
 echo $X

예상 출력을 제공합니다.

 abc def

이제 인터넷에서 백틱이 나왔다 $()는 것을 알 필요가 있지만 시도 할 때 :

export X=$((echo "abc"; echo "def"))

X 설정되어 있지 않고 오류가 발생합니다.

bash: echo "abc"; echo "def": syntax error: invalid arithmetic operator (error token is ""abc"; echo "def"")

내가 도대체 ​​뭘 잘못하고있는 겁니까?



답변

$(( … ))구문은 인 연산 식 .

누락 된 것은 산술 표현식 구문을 피하기 위해 $(와 다음 사이의 공백 (입니다.

쉘 명령 언어 스펙에서 명령 대체 에 관한 섹션은 실제로 다음을 경고합니다.

If the command substitution consists of a single subshell, such as:

   $( (command) )

a conforming application shall separate the "`$(`" and '`(`' into two tokens
(that is, separate them with white space). This is required to avoid any
ambiguities with arithmetic expansion.


답변

시험
export X="$(echo "abc"; echo "def")"


답변