Why does sh/bash set command line parameter values when trying to set environment variable?

12,345

Solution 1

You should just use ANT_OPTS=-Xmx512M instead of set ANT_OPTS=-Xmx512M.

UPDATE: See here for discussion of set, and the manual.

Solution 2

"set" isn't part of setting variables in Bourne Shell. That should be

ANT_OPTS=-Xmx512m
export ANT_OPTS 
Share:
12,345
Apollon
Author by

Apollon

Updated on June 05, 2022

Comments

  • Apollon
    Apollon almost 2 years

    A question on basics : While tuning environment variables for a program launched from a script, I ended up with somewhat strange behaviour with sh (which seems to be actually linked to bash) : variable setting seems to mess up with command-line parameters.

    Could somebody explain why does this happen?

    A simple script:

    #! /bin/sh
    
    # Messes with $1 ??
    set ANT_OPTS=-Xmx512M
    export ANT_OPTS
    
    # Works
    # export ANT_OPTS=-Xmx512M
    
    echo "0 = $0"
    echo "1 = $1"
    

    When I run this with the upper alternative (set + export), the result is as following:

    $ ./test.sh foo
    0 = ./test.sh
    1 = ANT_OPTS=-Xmx512M
    

    But with lower alternative (export straight), the result is as I supposed:

    $ ./test.sh foo
    0 = ./test.sh
    1 = foo
    

    There is surely logical explanation, I just haven't figured it out yet. Somebody who does have idea?

    br, Touko

  • Apollon
    Apollon almost 14 years
    OK, that also solves the behavior that I didn't expect. Thanks!
  • Hank Gay
    Hank Gay almost 14 years
    1. As @Paul Tomblin mentions in a comment, if you're using #!/bin/sh you should restrict yourself to just Bourne Shell, but bash is what you're going to get from /bin/sh on pretty much every single Linux distro, so if you get bugs it might be because you used a bash-ism by accident. 2. If you're coming to bash from csh or similar, you should probably find a good book and dig in; it seems like bash was designed to confuse people who already know csh (and vice versa).