Não está funcionando porque você está tentando aninhar backticks sem escape:
VARIA='head -$((${RANDOM} % 'wc -l < file' + 1)) file | tail -1'
Isso realmente tenta executar head -$((${RANDOM} %
como um único comando primeiro, e isso dá a você os dois primeiros erros:
$ VARIA='head -$((${RANDOM} % '
bash: command substitution: line 1: unexpected EOF while looking for matching ')'
bash: command substitution: line 2: syntax error: unexpected end of file
Em seguida, ele tenta executar
wc -l < file' + 1)) file | tail -1'
O que significa que ele tenta avaliar + 1)) file | tail -1
(que está entre os backticks), e isso fornece os próximos erros:
$ wc -l < file' + 1)) file | tail -1'
bash: command substitution: line 1: syntax error near unexpected token ')'
bash: command substitution: line 1: ' + 1)) file | tail -1'
Você pode contornar isso escapando dos backticks:
VARIA='head -$((${RANDOM} % \'wc -l < file\' + 1)) file | tail -1'
No entanto, como regra geral, geralmente é melhor não usar backticks. Você deve quase sempre usar $()
. É mais robusto e pode ser aninhado indefinidamente com uma sintaxe mais simples:
VARIA=$(head -$((${RANDOM} % $(wc -l < file) + 1)) file | tail -1)