Cadeia de substituição: Se vazio substituir, caso contrário, faça vazio

3

Eu queria saber se há uma abreviação para esse tipo de coisa.

Atualmente, posso fazer isso.

var_empty=; [ -n "$var" ] || var_empty=1; #intermediary variable
echo "REPL_if_var_empty_otherwise_empty=${var_empty:+REPL}"

Isso é factível sem o intermediário?

Eu tentei

sh -c 'readonly SAME=SAME; var=; echo test0=${var:-SAME} test1=${SAME:+REPL}; echo REPL_if_var_empty_otherwise_empty=${${var:-SAME}:+REPL}'

mas isso resulta em um erro bad substitution no último echo ( test0=SAME test1=REPL ). Por que é que? Existe outro jeito?

    
por PSkocik 02.11.2018 / 11:05

1 resposta

4

No bash, ksh ou zsh em ksh emulação, você poderia fazer:

r=empty;output=${r[${#var}]}

Em zsh :

output=${${var:-empty$var}%$var}

Caso contrário, você sempre pode fazer

output=;[ "$var" ]||output=empty
    
por 02.11.2018 / 12:29

Tags