Verwijderd
welk shellscript? wat is de shebang regel? bash? of bijvoorbeeld perl?
$@ in perl: set if the eval had a compilation error or runtime exception - cleared if no such problem occured.
man bash:
Special Parameters
@ Expands to the positional parameters, starting from one. When the expansion occurs within double quotes, each parameter expands to a separate word. That is, "$@" is equivalent to "$1" "$2" ... When there are no positional parameters, "$@" and $@ expand to nothing (i.e., they are removed).
Heb je hier wat aan?
$@ in perl: set if the eval had a compilation error or runtime exception - cleared if no such problem occured.
man bash:
Special Parameters
@ Expands to the positional parameters, starting from one. When the expansion occurs within double quotes, each parameter expands to a separate word. That is, "$@" is equivalent to "$1" "$2" ... When there are no positional parameters, "$@" and $@ expand to nothing (i.e., they are removed).
Heb je hier wat aan?
Over het algemeen is de parameter variable $@ een variatie op $*, dus een lijst van alle parameters. Verschil is dat de eerste ($@) geen gebruik maakt van de IFS en de tweede ($*) het eerste karakter gebruikt.
code:
1
2
3
4
5
6
| $ IFS='' $ set foo bar bam $ echo "$@" foo bar bam $ echo "$*" foobarbam |
Is trouwens een Bash script. Een voorbeeld van gebruik is: eval $@. Zonder quotes. Als ik het goed begrijp haalt hij dus gewoon de argumenten uit elkaar en wordt het zooitje daarna door eval getrokken.
In de Korn-shell ligt het anders.
Het verschil komt dan alleen tevoorschijn als de variabele tussen quotes staat en er spaties (correcter : het eerste character van ${IFS}") in de parameters voorkomt.
Met ${*} verdwijnt het verschil tussen de "spaties" binnen en tussen de parameters, met ${@} worden de "spaties" niet als een token-separator gezien :
Het verschil komt dan alleen tevoorschijn als de variabele tussen quotes staat en er spaties (correcter : het eerste character van ${IFS}") in de parameters voorkomt.
Met ${*} verdwijnt het verschil tussen de "spaties" binnen en tussen de parameters, met ${@} worden de "spaties" niet als een token-separator gezien :
Subtiel verschil, maar ik heb het ooit moeten gebruiken bij het doorgeven van verschillende teksten-met-spaties op de command-line van een script.# cat test.ksh
#!/bin/ksh
echo 'Using ${*}'
for V in "${*}"
do
echo ${V}
done
echo
echo 'Using ${@}'
for V in "${@}"
do
echo ${V}
done
# ./test.ksh "a b" c "d e"
Using ${*}
a b c d e
Using ${@}
a b
c
d e
The number of things that Arthur couldn't believe he was seeing was fairly large
Precies,
Waarschijnlijk is de eerste parameter weer opnieuw een shell commando en de volgende commando's weer zijn parameters...simpel.
Waarschijnlijk is de eerste parameter weer opnieuw een shell commando en de volgende commando's weer zijn parameters...simpel.
code:
1
2
3
| $ set echo hello world $ eval $@ hello world |
Pagina: 1