Sintaxes de substituição de variáveis podem ser unificadas?

0

Essas duas sintaxes de substituição de variáveis podem ser combinadas em uma?

rm "$s_a/$domain.conf" 2>/dev/null
rm "$s_e/$domain.conf" 2>/dev/null

como:

rm "$s_{a,e}/$domain.conf" 2>/dev/null
    
por JohnDoea 06.11.2018 / 21:25

1 resposta

5

Você pode , mas não enquanto cita a expansão (já que as aspas duplas preservam o significado literal de mais "caracteres especiais", chaves incluídas):

rm $s_{a,e}/$domain.conf

expande-se em etapas para:

rm $s_a/$domain.conf $s_e/$domain.conf

e depois para os valores correspondentes.

Dentro de aspas duplas, as chaves são deixadas sozinhas, então a linha se expande para:

rm (value of $s_){a,e}/(value of $domain).conf

As citações impedem expansões não intencionais, principalmente a divisão de palavras e a expansão de nomes de arquivos. Você poderia contornar a divisão de palavras desativando $IFS e poderia contornar a expansão de nome de arquivo com set -f , combinando com:

oIFS=$IFS
IFS=
set -f
rm $s_{a,e}/$domain.conf 2>/dev/null
IFS=$oIFS
set +f
    
por 06.11.2018 / 21:42