分页: 1 / 1

请教$的用法

发表于 : 2012-10-24 22:33
ak47kkk
大家好,我是bash shell 的新手,学习过程中遇到些问题,对于下面这句话,如何正确理解?

TOOLS_DIR=$(cd $(dirname "$0") && pwd)

dirname和pwd我知道分别是外部和内部命令,但无法理解 "$0"是什么意思,&&又是什么?

求教了!

Re: 请教$的用法

发表于 : 2012-10-24 22:37
YeLee
嗯,type一下你就知道是内置还是什么了。
$0啊,是,嗯,这个很难解释吧,程序启动参数的第一串字串啊,C语言学过吗?argv[0]就差不多了。
&&表示前面的成功就运行,不成功就跳过。

Re: 请教$的用法

发表于 : 2012-10-24 22:39
枫叶饭团
膜拜LS大虾,原来如果,我这么多年都白学了

Re: 请教$的用法

发表于 : 2012-10-24 22:44
ak47kkk
YeLee 写了:嗯,type一下你就知道是内置还是什么了。
$0啊,是,嗯,这个很难解释吧,程序启动参数的第一串字串啊,C语言学过吗?argv[0]就差不多了。
&&表示前面的成功就运行,不成功就跳过。
能否将整句话的意思翻译一下?我先尝试理解下你说的。

Re: 请教$的用法

发表于 : 2012-10-24 22:53
lilydjwg
「外部和内部命令」……DOS 转过来的?builtin 叫内建命令。

实际上 pwd 和 [、echo 等一样,也有可执行文件文件版:

代码: 全选

>>> which -a pwd
pwd: shell built-in command
/usr/bin/pwd
/bin/pwd

Re: 请教$的用法

发表于 : 2012-10-24 22:54
ak47kkk
lilydjwg 写了:「外部和内部命令」……DOS 转过来的?builtin 叫内建命令。

实际上 pwd 和 [、echo 等一样,也有可执行文件文件版:

代码: 全选

>>> which -a pwd
pwd: shell built-in command
/usr/bin/pwd
/bin/pwd
我还是比较关心整句话的意思....

Re: 请教$的用法

发表于 : 2012-10-24 23:10
lilydjwg
TOOLS_DIR=$(cd $(dirname "$0") && pwd)

变量 TOOLS_DIR 的值设置为以下命令的输出:cd $(dirname "$0") && pwd
- 进入以下命令的输出,如果成功,打印当前路径:dirname "$0"
- - 返回变量 $0 的值的路径中的目录名部分(如 xxx/abc/def -> xxx/abc)

在此例中,我也不知道为什么 dirname 可能失败……反而是 pwd 失败比较常见(但是 shell 内建的 pwd 也不会失败)。

Re: 请教$的用法

发表于 : 2012-10-25 0:02
ak47kkk
lilydjwg 写了:TOOLS_DIR=$(cd $(dirname "$0") && pwd)

变量 TOOLS_DIR 的值设置为以下命令的输出:cd $(dirname "$0") && pwd
- 进入以下命令的输出,如果成功,打印当前路径:dirname "$0"
- - 返回变量 $0 的值的路径中的目录名部分(如 xxx/abc/def -> xxx/abc)

在此例中,我也不知道为什么 dirname 可能失败……反而是 pwd 失败比较常见(但是 shell 内建的 pwd 也不会失败)。
多谢,我开始理解了,就是先尝试cd到$(dirname "$0"),如果这条命令成功,就取pwd的值并给TOOL_DIR变量,我唯一不理解的是dirname "$0",虽然YeLee说了这是字符窜参数,但我没见过这种用法,在哪里有介绍吗?我想系统地了解下。

Re: 请教$的用法

发表于 : 2012-10-25 1:00
ak47kkk
ak47kkk 写了:
lilydjwg 写了:TOOLS_DIR=$(cd $(dirname "$0") && pwd)

变量 TOOLS_DIR 的值设置为以下命令的输出:cd $(dirname "$0") && pwd
- 进入以下命令的输出,如果成功,打印当前路径:dirname "$0"
- - 返回变量 $0 的值的路径中的目录名部分(如 xxx/abc/def -> xxx/abc)

在此例中,我也不知道为什么 dirname 可能失败……反而是 pwd 失败比较常见(但是 shell 内建的 pwd 也不会失败)。
多谢,我开始理解了,就是先尝试cd到$(dirname "$0"),如果这条命令成功,就取pwd的值并给TOOL_DIR变量,我唯一不理解的是dirname "$0",虽然YeLee说了这是字符窜参数,但我没见过这种用法,在哪里有介绍吗?我想系统地了解下。
我搜了一下,$0是指Shell 本身的文件名,也就是bash,那么dirname "bash"就返回.,即当前目录,那这句话的意思就是获取当前目录并赋值给TOOLS_DIR??需要这么复杂吗?还是我理解有错误?

Re: 请教$的用法

发表于 : 2012-10-25 10:56
lilydjwg
ak47kkk 写了: 我搜了一下,$0是指Shell 本身的文件名,也就是bash,那么dirname "bash"就返回.,即当前目录,那这句话的意思就是获取当前目录并赋值给TOOLS_DIR??需要这么复杂吗?还是我理解有错误?
在 shell 中,$0 是脚本名(依据实现,通常是绝对路径,但也有可能是相对路径)。

Re: 请教$的用法

发表于 : 2012-10-26 9:09
ak47kkk
lilydjwg 写了:
ak47kkk 写了: 我搜了一下,$0是指Shell 本身的文件名,也就是bash,那么dirname "bash"就返回.,即当前目录,那这句话的意思就是获取当前目录并赋值给TOOLS_DIR??需要这么复杂吗?还是我理解有错误?
在 shell 中,$0 是脚本名(依据实现,通常是绝对路径,但也有可能是相对路径)。
那简单一句话就是,这段脚本就是想获取Shell运行的脚本所在的路径,并赋值给TOOLS_DIR。