You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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显示脚本名,你需要以独立进程的方式执行脚本,步骤如下:

  1. 把代码保存成脚本文件,比如myscript.sh:
#!/bin/bash
echo "$0"
  1. 给脚本添加执行权限:
chmod +x myscript.sh
  1. 用以下方式执行(任选一种):
    • 相对路径执行:./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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:25:28