Por que a expansão de substring [test = “- efoo”; echo $ {test: 0: 2}] falhar?

1

No Linux Mint, usando o bash ..

test="-ffoo"; echo ${test:0:2}

funciona exibindo os dois primeiros caracteres

mas

test="-efoo"; echo ${test:0:2}

falha, com saída aparentemente nula.

Estou pensando que a forma disso é

${parameter:offset:length}

Eu sei o suficiente que os caracteres de parâmetro não podem ser *@#?-$!0_

mas $test é o parâmetro - certamente seu conteúdo pode ser qualquer coisa? Eu acho que -e está acionando algo parecido com shell, mas por que ...

    
por David Brown 21.03.2018 / 19:22

1 resposta

3

Quando você corre

test="-efoo"; echo ${test:0:2}

echo é executado com o argumento -e , que em algumas implementações echo , incluindo o comando echo builtin da maioria das implementações bash , é uma opção válida e, portanto, é "engolida".

Use printf :

test="-efoo"; printf %s\n "${test:0:2}"
    
por 21.03.2018 / 19:43