Toon posts:

[ShellScripting] $@

Pagina: 1
Acties:

Verwijderd

Topicstarter
Weet iemand wat de command line variable $@ doet in een shellscript?

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?

Verwijderd

$ @
bash: @: command not found

  • richardt
  • Registratie: Mei 2002
  • Laatst online: 08-03-2025
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

Verwijderd

Topicstarter
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.

  • mvdejong
  • Registratie: Juni 2000
  • Laatst online: 29-11-2024

mvdejong

When does the hurting stop ?

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 :
# 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
Subtiel verschil, maar ik heb het ooit moeten gebruiken bij het doorgeven van verschillende teksten-met-spaties op de command-line van een script.

The number of things that Arthur couldn't believe he was seeing was fairly large


  • richardt
  • Registratie: Mei 2002
  • Laatst online: 08-03-2025
Precies,

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