最近在看脚本的时候经常发现有“dirname $0”这样一种表述,很是不解。
# get path to scripts
scripts_dir=`dirname $0`
刚开始我还以为需要把dirname改成对应的路径,同时又不解$0在这里是表达什么含义。
如图所示,dirname $0是不能在命令行下单独执行的。
举个例子,我用mkdir -p创建一系列文件夹
mkdir -p 1/2/3/4/5/6
然后写一个小脚本 test.sh
#!/bin/bash
cd `dirname $0`
echo `pwd`
切到/home/zwang/1/2/3/4路径下,运行test.sh后就位于脚本所在的目录并输出路径了。
现在我们回头来把这个脚本拆开来理解一下
这样一来就能明白dirname $0是如何获取当前执行脚本的路径了吧?
在这里需要补充$( ) 和 ``的不同。
二者都是返回括号中命令的结果,是用来作命令替换的,即先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。
但需要注意两点:
举个栗子~
#!/bin/bash
basepath=$(cd `dirname $0`; pwd)
echo $basepath
此时输出的结果是脚本所在路径,但如果我换一种命令替换的方式
#!/bin/bash
basepath=`cd `dirname $0`; pwd`
echo $basepath
出现了报错,这就需要按我上面提到的在多层次的复合替换中,``必须要额外的跳脱处理(反斜线),如果我按以下代码加上反斜线即可正常输出。
#!/bin/bash
basepath=`cd \`dirname $0\`; pwd`
echo $basepath
参考资料:
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有