Geralmente chamando:
var=value cmd
onde cmd
é uma função não é portátil.
Com bash
, isso só funciona para variáveis escalares (e com x=(...)
analisado como uma matriz, mas atribuído como um escalar) e há vários problemas com o escopo se você fizer isso, com ksh93
e yash
, funciona, mas a definição da variável permanece depois. Com mksh
, você recebe um erro de sintaxe. No shell Bourne, não funcionou nem mesmo para variáveis escalares.
Observe também que mesmo com variáveis escalares, se a variável acaba sendo exportada dentro da função (isto é, passada para os comandos sendo executados) varia de shell para shell (é em bash, yash , mksh, zsh, mas não em ksh, ash).
Funciona da maneira esperada com zsh
. Observe que os índices de matriz zsh
começam em 1.
bash-4.4$ zsh
$ a=(before value)
$ f() echo $a[1]
$ a=(temp value) f
temp
$ echo $a[1]
before