substituindo o backtick por $ () não está funcionando

17

Eu tenho alguns scripts antigos que tento atualizar. Parte do código condensa-se a:

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

que fornece o resultado esperado:

 abc def

Agora, a internet informa que os backticks estão fora $() é o que preciso usar, mas quando tento:

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

X não está definido e recebo o erro:

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

O que estou fazendo de errado?

    
por Harold 29.01.2014 / 12:24

2 respostas

27

A sintaxe $(( … )) é uma expressão aritmética .

O que falta é um espaço entre o $( e o seguinte ( , para evitar a sintaxe da expressão aritmética.

A seção sobre substituição de comandos na especificação da linguagem de comandos shell alerta para isso :

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.
    
por 29.01.2014 / 12:26
15

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

    
por 29.01.2014 / 12:27

Tags