bash中echo "$0"为何不打印脚本名反而输出-bash?
为什么
echo "$0"输出-bash而不是脚本名? 首先得明确$0的定义:它代表的是当前shell进程的名称,只有当你以独立脚本文件的形式执行代码时,它才会指向脚本的路径或名称。你遇到的情况,大概率是下面两种场景之一:
场景1:直接在交互式终端里运行echo "$0"
如果是直接在bash提示符下输入echo "$0",这时候你处于一个交互式bash会话中,$0自然会显示当前shell的名字(也就是-bash,开头的-表示这是一个登录shell)。
场景2:用source或.命令加载脚本
比如你写了脚本test.sh,然后运行source test.sh或者. test.sh,这时候脚本是在当前shell进程里执行的,而不是启动一个新的bash子进程,所以$0还是当前shell的名称,不会变成脚本名。
怎么正确获取脚本名称?
要让$0显示脚本名,你需要以独立进程的方式执行脚本,步骤如下:
- 把代码保存成脚本文件,比如
myscript.sh:
#!/bin/bash echo "$0"
- 给脚本添加执行权限:
chmod +x myscript.sh
- 用以下方式执行(任选一种):
- 相对路径执行:
./myscript.sh,输出会是./myscript.sh - 绝对路径执行:
/home/yourname/myscript.sh,输出会是完整路径 - 若脚本在
PATH目录下,直接输入myscript.sh,输出会是myscript.sh
- 相对路径执行:
如果你只想获取脚本的纯名称(不带路径),可以用basename "$0",修改脚本如下:
#!/bin/bash echo "脚本完整路径:$0" echo "脚本名称:$(basename "$0")"
执行后会得到类似输出:
脚本完整路径:./myscript.sh 脚本名称:myscript.sh
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

