Tenho um problema de script BASH que reduzi, mas não consigo entender o que estou vendo. Quero obter uma substring de um array de forma sucinta. Aqui está o que estou vendo no bash, com 'set -x' para que os comandos sejam impressos conforme são executados:
$: read -a colours
+ read -a colours
blue green red yellow pink purple
$: echo ${colours[@]}
+ echo blue green red yellow pink purple
blue green red yellow pink purple
$: expr substr "${colours[@]}" 16 6
+ expr substr blue green red yellow pink purple 16 6
expr: syntax error: unexpected argument ‘yellow’
$: expr substr \"${colours[@]}\" 16 6
+ expr substr '"blue' green red yellow pink 'purple"' 16 6
expr: syntax error: unexpected argument ‘yellow’
A última tentativa do expr substr
comando retornou aspas estranhas para os elementos do array, então de onde isso veio? Ajude-me a entender o que expr substr
está acontecendo aqui ou isso é um bug?
EDIT: Listei abaixo alguns comportamentos desejados em uma string entre aspas simples, mas por que não posso citar um array da mesma maneira?
$: all_colours=${colours[@]}
+ all_colours='blue green red yellow pink purple'
$: expr substr $all_colours 16 6
+ expr substr blue green red yellow pink purple 16 6
expr: syntax error: unexpected argument ‘yellow’
$: expr substr "$all_colours" 16 6
+ expr substr 'blue green red yellow pink purple' 16 6
yellow