首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >源Bash脚本中的$0未返回脚本名称

源Bash脚本中的$0未返回脚本名称
EN

Stack Overflow用户
提问于 2011-05-02 09:59:21
回答 3查看 4K关注 0票数 7

当我在运行Mac OS X v10.6.7 (雪豹)的Mac上的Bash脚本中引用$0时,我得到的是-bash,而不是脚本的名称。

我运行了this Stack Overflow question中描述的脚本

代码语言:javascript
运行
复制
#!/bin/bash

echo
echo '# arguments called with ($@) -->  '"$@"
echo '# $1 -------------------------->  '"$1"
echo '# $2 -------------------------->  '"$2"
echo '# path to me ($0) ------------->  '"$0"
echo '# parent path (${0%/*}) ------->  '"${0%/*}"
echo '# my name (${0##*/}) ---------->  '"${0##*/}"
echo

生成以下代码:

代码语言:javascript
运行
复制
> . show_parms.sh foo

# arguments called with ($@) -->  foo
# $1 -------------------------->  foo
# $2 -------------------------->
# path to me ($0) ------------->  -bash
# parent path (${0%/*}) ------->  -bash
# my name (${0##*/}) ---------->  -bash

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-02 10:04:08

这是有意义的,因为您是从源代码中获取脚本

代码语言:javascript
运行
复制
. show_parms.sh foo

而不是执行它

代码语言:javascript
运行
复制
./show_parms.sh foo

正如此answer to the same question中所解释的,您可以使用$BASH_SOURCE来了解命令的来源文件的名称。

票数 9
EN

Stack Overflow用户

发布于 2011-05-02 10:03:54

$0返回进程的名称。通过使用.操作符,您只是将脚本读入现有的bash进程并计算它包含的命令;进程的名称仍然是"-bash",这就是您所看到的。您必须实际将脚本作为其自己的进程执行:

代码语言:javascript
运行
复制
chmod +x show_parms.sh
./show_params.sh foo

然后你就会得到你想要的。这并不是特定于OS X的;这只是bash (或sh)的工作方式。

票数 5
EN

Stack Overflow用户

发布于 2011-05-02 10:05:53

这是因为您正在使用。操作符。如果你只是输入

代码语言:javascript
运行
复制
show_parms.sh foo

你会得到你想要的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5852876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档