'How to initialize array from array in zsh?
My script test.zsh:
args=$@
argss=($@)
echo ${@:2}
echo ${args:2}
echo ${argss:2}
The output:
$ ./test.zsh foo bar foobar
bar foobar
o bar foobar
o
It looks like args is being initialized as the string of $@ instead of as an array. How do I initialize args as an array? ($@) does not seem to work either
Solution 1:[1]
You need to put parentheses around $@ to make args an array:
args=($@)
In other shells, you should also put quotes around it (args=("$@")) to avoid word splitting, but this is disabled by default in zsh (see the option SH_WORD_SPLIT).
Note that ${@:2} will give you $1 $2 $3 ..., while ${args:2} will give $2 $3 ..., because zsh prepends $0 to $@ when you use that form of parameter subscripting for compatibility with other shells.
The preferred zsh way to subscript arrays is ${arr[start,end]}, where end is inclusive and may be negative.
${args[1,-1]} and ${args[@]} will expand to the same thing.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
