choosing between $0 and BASH_SOURCE

后端 未结 3 867
半阙折子戏
半阙折子戏 2020-12-07 08:13

How does one choose between \"$0\" and \"${BASH_SOURCE[0]}\"

This description from GNU didn\'t help me much.

    BASH_SOURC         


        
3条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-07 08:53

    These scripts may help illustrate. The outer script calls the middle script, which calls the inner script:

    $ cat outer.sh
    #!/usr/bin/env bash
    ./middle.sh
    
    $ cat middle.sh
    #!/usr/bin/env bash
    ./inner.sh
    
    $ cat inner.sh
    #!/usr/bin/env bash
    echo "\$0 = '$0'"
    echo "\${BASH_SOURCE[0]} = '${BASH_SOURCE[0]}'"
    echo "\${BASH_SOURCE[1]} = '${BASH_SOURCE[1]}'"
    echo "\${BASH_SOURCE[2]} = '${BASH_SOURCE[2]}'"
    
    $ ./outer.sh
    $0 = './inner.sh'
    $BASH_SOURCE[0] = './inner.sh'
    $BASH_SOURCE[1] = ''
    $BASH_SOURCE[2] = ''
    

    However, if we change the script calls to source statements:

    $ cat outer.sh
    #!/usr/bin/env bash
    source ./middle.sh
    
    $ cat middle.sh
    #!/usr/bin/env bash
    source ./inner.sh
    
    $ cat inner.sh
    #!/usr/bin/env bash
    echo "\$0 = '$0'"
    echo "\${BASH_SOURCE[0]} = '${BASH_SOURCE[0]}'"
    echo "\${BASH_SOURCE[1]} = '${BASH_SOURCE[1]}'"
    echo "\${BASH_SOURCE[2]} = '${BASH_SOURCE[2]}'"
    
    $ ./outer.sh
    $0 = './outer.sh'
    $BASH_SOURCE[0] = './inner.sh'
    $BASH_SOURCE[1] = './middle.sh'
    $BASH_SOURCE[2] = './outer.sh'
    

提交回复
热议问题