Isto:
set arrname = ("x" "nx" "y" "ny" "z" "nz")
é uma atribuição de matriz comum (BTW, as aspas não são necessárias neste caso).
Isto:
set arrname = (x,nx,y,ny,z,nz)
também faz $arrname uma matriz, mas tem apenas um elemento, com o valor x,nx,y,ny,z,nz (as vírgulas não são especiais neste contexto).
Isto:
set arrname = {x,nx,y,ny,z,nz}
usa um padrão glob; Assim como {foo,bar}.txt se expande para foo.txt bar.txt , então {x,nx,y,ny,z,nz} expande para x nx y ny z nz .
Aparentemente, o tcsh permite que você use {x,nx,y,ny,z,nz} como uma inicialização de array, mas se você mesmo expandi-lo para:
set arrname = x nx y ny z nz
define $arrname para apenas x e silenciosamente ignora os outros argumentos. Este é um dos muitos problemas estranhos na maneira como os argumentos do comando csh e tcsh parse. Eu usei csh e tcsh por décadas (embora eu mudei principalmente para bash), e eu costumo correr para casos como este, onde eu tenho que experimentar para determinar como algo vai funcionar.
Se você quiser definir $arrname como um valor de matriz, use parênteses e não use vírgulas.
E como barmar mencionado em um comentário, você deve ler isto:
link
O csh e o tcsh têm uma sintaxe de array um pouco mais conveniente do que o bash. Em csh e tcsh, você pode se referir ao terceiro elemento de uma matriz como $arrname[3] ; no bash você tem que adicionar chaves: ${arrname[3]} . Além disso, os arrays do bash são baseados em 0, enquanto os arrays do csh / tcsh são baseados em 1. Mas a maior consistência da sintaxe e semântica do bash, IMHO, mais do que compensa isso.
Alguns exemplos de array simples, em csh:
% set arr = ( 10 20 30 )
% echo $arr
10 20 30
% echo $arr[3]
30
e no bash:
$ arr=(10 20 30)
$ echo ${arr[@]}
10 20 30
$ echo ${arr[*]}
10 20 30
$ echo ${arr[2]}
30
(A sintaxe [@] e [*] se comporta de maneira sutilmente diferente; consulte a documentação do bash para obter detalhes.)