shell 实践版 $0 和 dirname的含义

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013066244/article/details/80579398

环境

服务器:centos6.5
工具:CRT

场景

今天依然是在看alluxio-mount.sh脚本

看到这么一句:

$(cd "$( dirname "$( readlink "$0" || echo "$0" )" )"; pwd)

这里面的$0,我经常看到,但是我总是忘记;今天我打算实践下,加深下印象;

网上给出一致答案:

$0 —> Shell本身的文件名(错误的理解)

我后面也注释了,这是错误的;

测试如下:
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://zhidao.baidu.com/question/712827456804604325.html

猜你喜欢

转载自blog.csdn.net/u013066244/article/details/80579398
今日推荐