Linux 为什么不是';t echo“$0“;在bash中打印脚本名称?
在学校里,我知道“$0”将是bash中脚本的名称,但当我试图打印它时,它实际上打印的是-bash而不是scriptnameLinux 为什么不是';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
#!/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
$BASH\u SOURCE
,而不是$0
<代码>$0通常不可靠,如中所述。
$ echo "$0"
bash
$ . ./1.sh
bash