本文用到的demo内容如下,建立脚本,将脚本改成可执行状态后运行:
</pre><pre name="code" class="csharp">#!/bin/bash
echo `pwd`
var=$(dirname $0)
echo $var
cd dirname1
echo $var
echo `pwd`
exit
~
一、pwd和dirname
1、pwd返回的是当前目录,“print name of current/working directory”,但并不一定是脚本存放的目录,如下所示,当在~/c-example路径下执行
dirname1/dirname2/
pwd得到结果为
<pre name="code" class="csharp">/home/maria/c-example
并不是脚本所在的路径
maria@maria:~/c-example/dirname1/dirname2$ ls
maria@maria:~/c-example/dirname1/dirname2$ cd ../..
maria@maria:~/c-example$ dirname1/dirname2/
/home/maria/c-example
dirname1/dirname2
dirname1/dirname2
/home/maria/c-example/dirname1
2、dirname $0在命令行状态下返回" . ",而在脚本中返回的是脚本所在的路径,且是脚本所在路径相对于命令执行时的路径,如下当在~/c-example路径下执行
dirname1/dirname2/
得到dirname $0结果为
<pre name="code" class="csharp"><span style="white-space:pre"> </span>dirname1/dirname2
是相对于命令执行时的相对路径
3、二者的区别可由如上示例看到:pwd会随着cd等指令而变化,但最开始由dirname $0得到的相对路径是一个固定参数。
二、关于“” ‘’ ``的区别(摘自http://blog./wb_zhaoyuwei/blog/static/183075439201181553840490/)
【`】,学名叫“倒引号”, 如果被“倒引号”括起来, 表示里面需要执行的是命令。
比如 `dirname $0`, 就表示需要执行 dirname $0 这个命令
【“”】 , 被双引号括起来的内容, 里面 出现 $ (美元号: 表示取变量名) `(倒引号: 表示执行命令) \(转义号: 表示转义), 其余的才表示字符串。
【’‘】, 被单引号括起来的内容, 里面所有的都表示串, 包括上面所说的 三个特殊字符。