Why isn't echo “$0” printing the script name in bash?
本问题已经有最佳答案,请猛点这里访问。
在学校,我知道"0美元"是bash中脚本的名称,但当我尝试打印它时,它实际上是打印-bash而不是脚本名。
1 2 | #!/bin/bash echo"$0" |
输出:-BASH
是否有我遗漏的内容,或者是否有其他命令来获取脚本的名称?
您从交互shell运行
1 2 3 4 5 6 | $ cat > 1.sh #!/bin/bash echo"$0" $ chmod u+x 1.sh $ ./1.sh ./1.sh |
但是
1 2 3 4 | $ echo"$0" bash $ . ./1.sh bash |
使用
$0 是由调用方设置的,可以是任意字符串——它不能保证与脚本的读取位置有任何关系。为了证明这一点,尝试运行
(exec -a arbitrary-name ./your-script) ,它将在$0 设置为arbitrary-name 时执行your-script 。当脚本是
source d,或者从文件中读取的函数是从其他地方执行时,$0 不会得到适当的更新;而在这些情况下,$BASH_SOURCE 是更新的。本地文件名可能根本不存在:考虑使用
ssh remotehost 'bash -s' <./scriptname 运行脚本的情况:没有与脚本源文件对应的本地文件名。