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