环境
服务器:centos6.5
工具:CRT
场景
今天依然是在看alluxio-mount.sh
脚本
看到这么一句:
$(cd "$( dirname "$( readlink "$0" || echo "$0" )" )"; pwd)
这里面的$0
,我经常看到,但是我总是忘记;今天我打算实践下,加深下印象;
网上给出一致答案:
我后面也注释了,这是错误的;
测试如下:
test.sh
测试脚本:
#/bin/bash
echo "$0"
# 目前看来没什么问题
[yutao@master01 ~]$ ./test.sh
#结果
./test.sh
# 我再加一层目录
[yutao@master01 ~]$ cd test_files/
[yutao@master01 test_files]$ mv ../test.sh ./
[yutao@master01 ~]$ ./test_files/test.sh
# 结果
./test_files/test.sh
# 可以看出上面不只是打印出来文件名,还有上一层的路径
# 我再加一层目录
[yutao@master01 test_files]$ mkdir love
[yutao@master01 test_files]$ cd love/
[yutao@master01 love]$ mv ../test.sh ./
[yutao@master01 ~]$ ./test_files/love/test.sh
# 结果
./test_files/love/test.sh
$0
这个表示的正真的含义是:当前运行的命令名
,一般用于脚本中。
网上大量的说法是Shell本身的文件名
。一方面说明大家都是复制粘贴,没实践;另一方面可能,大家只测了当前目录的情况;
dirname
这个我们来看看官方的解释:
[yutao@master01 ~]$ dirname --help
用法:dirname 名称
或:dirname 选项
输出已经去除了尾部的"/"字符部分的名称;如果名称中不包含"/",
则显示"."(表示当前目录)。
--help 显示此帮助信息并退出
--version 显示版本信息并退出
示例:
dirname /usr/bin/sort 输出"/usr/bin"。
dirname stdio.h 输出"."。
请向bug-coreutils@gnu.org 报告dirname 的错误
GNU coreutils 项目主页:<http://www.gnu.org/software/coreutils/>
GNU 软件一般性帮助:<http://www.gnu.org/gethelp/>
请向<http://translationproject.org/team/zh_CN.html> 报告dirname 的翻译错误
要获取完整文档,请运行:info coreutils 'dirname invocation'
这句话,已经说得很明白:
输出已经去除了尾部的”/”字符部分的名称;如果名称中不包含”/”,则显示”.”(表示当前目录)。
test.sh
脚本:
#/bin/bash
echo "`dirname $0`"
echo "$0"
测试:
[yutao@master01 ~]$ ./test_files/love/test.sh
./test_files/love
./test_files/love/test.sh
总结
多看,多实践,多实践
参考地址:
原文链接:https://www.f2er.com/bash/387866.html