Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

630
Views
diferencia entre $@ y $* en bash script

Hay 4 fragmentos de bash a continuación. Los llamo con ./script.sh abc

 for arg in $@; do echo "$arg" done ## output "a\nb\nc" for arg in "$@"; do echo "$arg" done ## output "a\nb\nc" -- I don't know why for arg in $*; do echo "$arg" done ## output "a\nb\nc" for arg in "$*"; do echo "$arg" done ## output "abc"

No sé cuál es la diferencia exacta entre $@ y $* ,
y creo que "$@" y "$*" deberían ser lo mismo, pero no lo son. ¿Por qué?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Si tiene un script foo.sh :

 asterisk "$*" at-sign "$@"

y llamarlo con:

 ./foo.sh "aa" "bb" "cc"

es equivalente a:

 asterisk "aabbcc" at-sign "aa" "bb" "cc"

Sin las comillas, son lo mismo:

 asterisk $* at-sign $@

sería equivalente a:

 asterisk "a" "a" "b" "b" "c" "c" at-sign "a" "a" "b" "b" "c" "c"
over 4 years ago · Santiago Trujillo Report

0

La diferencia entre $* y $@ es:

"$*" All the positional parameters (as a single word) *

"$@" All the positional parameters (as separate strings)

Si pasa tres argumentos de línea de comandos dados a un script bash a un programa C usando ./my_c $@,

obtienes el resultado ARG[1] == "par1" ARG[2] == "par2" ARG[3] == "par3"

Si pasa tres argumentos de línea de comandos dados a un script bash a un programa C usando ./my_c $*,

obtienes el resultado ARG[1] == "par1 par2 par3"

over 4 years ago · Santiago Trujillo Report

0

Esto es importante en los scripts de shell: por ejemplo, el script testargs.sh

 #! /bin/bash -p echo $# for i in $(seq 1 $#) do echo "$i: ${!i}" done for val in "$@"; do echo "in quote @, $val" done for val in "$*"; do echo "in quote *, $val" done for val in $@; do echo "not in quote @, $val" done for val in $*; do echo "not in quote *, $val" done

Si este script se ejecuta como /tmp/testargs.sh abc 'd e' , los resultados son:

 4 1: a 2: b 3: c 4: de in quote @, a in quote @, b in quote @, c in quote @, de in quote *, abcde not in quote @, a not in quote @, b not in quote @, c not in quote @, d not in quote @, e not in quote *, a not in quote *, b not in quote *, c not in quote *, d not in quote *, e

Por lo tanto, si se va a conservar la cantidad de argumentos, siempre use "$@" o repita cada argumento usando el bucle for i in $(seq 1 $#) . Sin comillas, ambos son iguales.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!