如何确定脚本本身中的Bash脚本文件的名称?

就像如果我的脚本在文件runme.sh中,那么我如何让它显示“您正在运行runme.sh”消息而不硬编码?


当前回答

如果脚本名中有空格,更可靠的方法是使用"$0"或"$(basename "$0")"-或MacOS: "$(basename \"$0\")"。这可以防止名称以任何方式被破坏或解释。一般来说,在shell中始终使用双引号作为变量名是一种良好的实践。

其他回答

如果不带路径,可以使用${0##*/}

您可以使用$0来确定您的脚本名称(带完整路径)-要获得只有您可以使用该变量的脚本名称

basename $0

在bash中,您可以使用$0获取脚本文件名。通常$1,$2等用于访问CLI参数。类似地,$0是访问触发脚本的名称(脚本文件名)。

#!/bin/bash
echo "You are running $0"
...
...

如果你使用/path/to/script.sh这样的路径调用脚本,那么$0也会给出带有路径的文件名。在这种情况下,需要使用$(basename $0)来获取脚本文件名。

以下是我从Dimitre Radoulov的回答中得到的灵感(顺便说一下,我给他的回答投了赞)。

script="$BASH_SOURCE"
[ -z "$BASH_SOURCE" ] && script="$0"

echo "Called $script with $# argument(s)"

不管你如何调用你的脚本

. path/to/script.sh

or

./path/to/script.sh

如果脚本名中有空格,更可靠的方法是使用"$0"或"$(basename "$0")"-或MacOS: "$(basename \"$0\")"。这可以防止名称以任何方式被破坏或解释。一般来说,在shell中始终使用双引号作为变量名是一种良好的实践。