Friday, May 6, 2011

Like to store all command-line arguments to a bash script into a single variable

Let's say I have a bash script called foo.sh.

I'd like to call it like this

foo.sh Here is a bunch of stuff on the command-line

and I'd like it to store all of that text into a single variable and print it out.

So my output would be:

Here is a bunch of stuff on the command-line

How would I do this?

From stackoverflow
  • echo "$*"
    

    would do what you want, namely printing out the entire command-line arguments, separated by a space (or, technically, whatever the value of $IFS is). If you wanted to store it into a variable, you could do

    thevar="$*"
    

    If that doesn't answer your question well enough, I'm not sure what else to say...

    Mark Biek : Easier than I thought. Thanks!
  • Have a look at the $* variable. It combines all command line arguments into one.

    echo "$*"
    

    This should do what you want.

    More info here.

  • The command echo will take all arguments and print them out:

    echo Here is a bunch of stuff on the command-line
    

    You should quote the arguments if you have special characters.

  • If you want to avoid having $IFS involved, use $@ (or don't enclose $* in quotes)

    $ cat atsplat
    IFS="_"
    echo "     at: $@"
    echo "  splat: $*"
    echo "noquote: "$*
    
    $ ./atsplat this is a test
         at: this is a test
      splat: this_is_a_test
    noquote: this is a test
    

    The IFS behavior follows variable assignments, too.

    $ cat atsplat2
    IFS="_"
    atvar=$@
    splatvar=$*
    echo "     at: $atvar"
    echo "  splat: $splatvar"
    echo "noquote: "$splatvar
    
    $ ./atsplat2 this is a test
         at: this is a test
      splat: this_is_a_test
    noquote: this is a test
    

    Note that if the assignment to $IFS were made after the assignment of $splatvar, then all the outputs would be the same ($IFS would have no effect in the "atsplat2" example).

0 comments:

Post a Comment