Calling one Bash script from another Script passing it arguments with quotes and spaces

nmadhok picture nmadhok · Jun 7, 2013 · Viewed 128.7k times · Source

I made two test bash scripts on Linux to make the problem clear.

TestScript1 looks like:
    echo "TestScript1 Arguments:"
    echo "$1"
    echo "$2"
    echo "$#"
    ./testscript2 $1 $2
TestScript2 looks like:
    echo "TestScript2 Arguments received from TestScript1:"
    echo "$1"
    echo "$2"
    echo "$#"
When i execute testscript1 in the following way:
    ./testscript1 "Firstname Lastname" [email protected]  
The desired Output should be:
    TestScript1 Arguments:  
    Firstname Lastname  
    [email protected]  
    2
    TestScript2 Arguments received from TestScript1:  
    Firstname Lastname  
    [email protected]  
    2  
But the actual output is:
    TestScript1 Arguments:  
    Firstname Lastname  
    [email protected]  
    2
    TestScript2 Arguments received from TestScript1:  
    Firstname
    Lastname      
    3  

How do i solve this problem? I want to get the desired output instead of the actual output.

Answer

Markku K. picture Markku K. · Jun 7, 2013

Quote your args in Testscript 1:

echo "TestScript1 Arguments:"
echo "$1"
echo "$2"
echo "$#"
./testscript2 "$1" "$2"