Passing arguments with spaces between (bash) script

Bash

Bash Problem Overview


I've got the following bash two scripts

a.sh:

#!/bin/bash
./b.sh 'My Argument'

b.sh:

#!/bin/bash
someApp $*

The someApp binary receives $* as 2 arguments ('My' and 'Argument') instead of 1.

I've tested several things:

  • Running someApp only thru b.sh works as expected
  • Iterate+echo the arguments in b.sh works as expected
  • Using $@ instead of $* doesn't make a difference

Bash Solutions


Solution 1 - Bash

$*, unquoted, expands to two words. You need to quote it so that someApp receives a single argument.

someApp "$*"

It's possible that you want to use $@ instead, so that someApp would receive two arguments if you were to call b.sh as

b.sh 'My first' 'My second'

With someApp "$*", someApp would receive a single argument My first My second. With someApp "$@", someApp would receive two arguments, My first and My second.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJohn FearView Question on Stackoverflow
Solution 1 - BashchepnerView Answer on Stackoverflow