Linux 为什么不是';t echo“$0“;在bash中打印脚本名称?

Linux 为什么不是';t echo“$0“;在bash中打印脚本名称?,linux,bash,Linux,Bash,在学校里,我知道“$0”将是bash中脚本的名称,但当我试图打印它时,它实际上打印的是-bash而不是scriptname #!/bin/bash echo "$0" 输出:-bash 是否有我遗漏的内容,或者是否有其他命令获取脚本名称?您正在从交互式shell而不是脚本运行echo“$0”。也许你把它放进了一个脚本中,但是你没有调用它,而是把脚本来源化了 $ cat > 1.sh #!/bin/bash echo "$0" $ chmod u+x 1.sh $ ./1.sh ./1.s

在学校里,我知道“$0”将是bash中脚本的名称,但当我试图打印它时,它实际上打印的是-bash而不是scriptname

#!/bin/bash
echo "$0"
输出:-bash


是否有我遗漏的内容,或者是否有其他命令获取脚本名称?

您正在从交互式shell而不是脚本运行
echo“$0”
。也许你把它放进了一个脚本中,但是你没有调用它,而是把脚本来源化了

$ cat > 1.sh
#!/bin/bash
echo "$0"
$ chmod u+x 1.sh
$ ./1.sh
./1.sh
但是


使用
$BASH_SOURCE
,而不是
$0
,如中所述,或者更好的是,不要依赖于能够准确确定脚本的位置

  • $0
    由调用者设置,可以是任意字符串——不能保证与读取脚本的位置有关

    为了演示这一点,请尝试运行
    (exec-任意名称/您的脚本)
    ,它将执行
    您的脚本
    ,并将
    $0
    设置为
    任意名称

  • 当脚本是
    源代码
    d时,或者从其他地方执行从文件读取的函数时,
    $0
    未适当更新;而
    $BASH_SOURCE
    在这些情况下会更新


  • >P>本地文件名可能根本不存在:考虑您的脚本运行在<代码> SSH远程主机'BASH-S '的情况下,谢谢。我将尝试使用
    $BASH\u SOURCE
    ,而不是
    $0
    <代码>$0通常不可靠,如中所述。
    $ echo "$0"
    bash
    $ . ./1.sh
    bash