Special $@ and $* Parameters in bash

There is a say no difference between $@ and $* in Shell! What ?!! Have you ever thought if there is no difference, why there are two of them? it could be one $@ or $* , Do You Agree? So Let’s see What the difference is . Create a script and try it one by one First One $@ : #! /bin/bash MAIN() { echo "First Parameter is $1" } MAIN $@ Execute it like below and give the script some arguments: $ ./Diff.sh "Jhon Smith" "Marry Ann" $ First Parameter is Jhon Second One $* : #! /bin/bash MAIN() { echo "First Parameter is $1" } MAIN $* The result will be : $ ./Diff.sh "Jhon Smith" "Marry Ann" $ First Parameter is Jhon Far Now There is no difference, maybe those people were right! Let us go further and try them with double quotes "$@" : #! /bin/bash MAIN() { echo "First Parameter is $1" } MAIN "$@" $ ./Diff.sh "Jhon Smith" "Marry Ann" $ First Parameter is Jhon Smith The second one in double quotes "$*" : #! /bin/bash MAIN() { echo "First Parameter is $1" } MAIN "$*" $ ./Diff.sh "Jhon Smith" "Marry Ann" $ First Parameter is Jhon Smith Marry Ann So be careful when you use double quotes and tell those people there is a difference, explain to them shell is sensitive to double quotes. Resources Gnu.org Bash Documents Book

Mar 9, 2025 - 00:37
 0
Special $@ and $* Parameters in bash

There is a say no difference between $@ and $* in Shell! What ?!!

Have you ever thought if there is no difference, why there are two of them? it could be one $@ or $* , Do You Agree?

So Let’s see What the difference is . Create a script and try it one by one

First One $@ :

#! /bin/bash 

MAIN()
{
        echo "First Parameter is $1"
}

MAIN $@

Execute it like below and give the script some arguments:

$ ./Diff.sh "Jhon Smith" "Marry Ann" 
$ First Parameter is Jhon

Second One $* :

#! /bin/bash 

MAIN()
{
        echo "First Parameter is $1"
}

MAIN $*

The result will be :

$ ./Diff.sh "Jhon Smith" "Marry Ann" 
$ First Parameter is Jhon

Far Now There is no difference, maybe those people were right!

Let us go further and try them with double quotes "$@" :

#! /bin/bash 

MAIN()
{
        echo "First Parameter is $1"
}

MAIN "$@"
$ ./Diff.sh "Jhon Smith" "Marry Ann" 
$ First Parameter is Jhon Smith

The second one in double quotes "$*" :

#! /bin/bash 

MAIN()
{
        echo "First Parameter is $1"
}

MAIN "$*"
$ ./Diff.sh "Jhon Smith" "Marry Ann" 
$ First Parameter is Jhon Smith Marry Ann

So be careful when you use double quotes and tell those people there is a difference, explain to them shell is sensitive to double quotes.

Resources