Parece que você não está usando bash
. Só posso reproduzir o erro mostrado se eu usar dash
em vez de bash
:
-
bash
:$ line="someline content" $ echo ${line} someline content $ lastchars=${line: -5} $ echo ${lastchars} ntent
-
dash
:$ line="someline content" echo ${line} lastchars=${line: -5} echo ${lastchars} $ someline content $ dash: 3: Bad substitution
Sua linha shebang está apontando para bash
, mas você está executando o script com sh
, então o shebang é ignorado. /bin/sh
nos sistemas Ubuntu é, na verdade, dash
, um shell mínimo que não suporta a sintaxe que você está tentando usar.
Ao usar uma linha shebang, não há razão para chamar explicitamente um shell para o script, apenas torná-lo executável ( chmod a+x /path/to/script.sh
) e executá-lo sem especificar um interpretador:
/path/to/script.sh
Como alternativa, basta usar o caminho certo:
bash /path/to/script.sh