为什么不回应" $ 0"在bash中打印脚本名称?

时间:2018-04-16 14:48:38

标签: linux bash

在学校,我学会了#0; $ 0"将是bash中脚本的名称,但是当我尝试打印它时,它实际上会打印-bash而不是scriptname。

#!/bin/bash
echo "$0"

输出:-bash

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

2 个答案:

答案 0 :(得分:1)

您正在从交互式shell运行echo "$0",而不是从脚本运行。也许你把它放到一个脚本中,但后来采购脚本而不是调用它?

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

但是

$ echo "$0"
bash
$ . ./1.sh
bash

答案 1 :(得分:0)

使用$BASH_SOURCE而非$0,如BashFAQ #28中所述 - 或者更好,不依赖于能够准确确定您的脚本&# 39;所有的位置

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

    为了证明这一点,请尝试运行(exec -a arbitrary-name ./your-script)your-script执行$0并将arbitrary-name设置为$0

  • 当脚本为source d时,或者从其他位置执行从文件读取的函数时,
  • $BASH_SOURCE未正确更新;而在这些情况下ssh remotehost 'bash -s' <./scriptname 更新了。

  • 本地文件名可能根本不存在:考虑使用target="_blank"运行脚本的情况:没有与您的脚本对应的本地文件名&#39;来源。