分页: 1 / 1

请高手看看,这条语句是什么意思?

发表于 : 2013-09-24 11:17
七彩虹
小妹刚开始学习shell scripting. 请高手看看,这条语句是什么意思?

TESTDIR=$(echo ${0%/*}|sed "s#\.#`pwd`#")


先谢了。

Re: 请高手看看,这条语句是什么意思?

发表于 : 2013-09-24 11:22
eexpress
$() 就是计算
$0就是当前shell
%是去掉字符串的尾巴
|是管道
sed是替换
自己想

证明下你是小妹先

btw 这句估计是小白写的,小妹另外找个师傅吧。

Re: 请高手看看,这条语句是什么意思?

发表于 : 2013-09-24 11:46
七彩虹
谢谢eexpress 的回答。

语句大概的内容我猜得出来,但是我想知道确切的意思。
${0} 是正在被执行的命令的名字,也就是shell, 那么 ${0%/*} 是什么意思?我查了几本书都没有答案。
sed "s" 做替换我知道, 但是 sed "s#\.#`pwd`#" 是把什么替换成什么了? 这里 #是什么意思。

谢谢了。

Re: 请高手看看,这条语句是什么意思?

发表于 : 2013-09-24 12:51
lxf1992521
这是什么命令啊,太乱了吧。

${0%/*} :我估计他是想就提取当前脚本的文件名。但是$0已经是啦!

Re: 请高手看看,这条语句是什么意思?

发表于 : 2013-09-24 12:52
onlylove
七彩虹 写了:谢谢eexpress 的回答。

语句大概的内容我猜得出来,但是我想知道确切的意思。
${0} 是正在被执行的命令的名字,也就是shell, 那么 ${0%/*} 是什么意思?我查了几本书都没有答案。
sed "s" 做替换我知道, 但是 sed "s#\.#`pwd`#" 是把什么替换成什么了? 这里 #是什么意思。

谢谢了。
同ee的问题,证明你是小妹先
shell被转的晕晕的
只好回答下sed的问题,sed "s#\.#`pwd`#"是把\.换成pwd的输出,#是定界符,缺省是/的,随便用sed认可的定界符就好了,这边只是为了好认而已吧
\.是把.转义,这只是为了让.表示当前目录本身

Re: 请高手看看,这条语句是什么意思?

发表于 : 2013-09-24 14:18
七彩虹
谢谢onlylove的回答。我明白sed 的意思了, 只是还是不明白 ${0%/*}在做什么。
%/* 应该是把右边的字符串满足pattern /* 的都删了。但是为什么要跟${0} 放在一起?

Re: 请高手看看,这条语句是什么意思?

发表于 : 2013-09-24 14:26
eexpress
那是字符串的掐头去尾,搜索吧。

Re: 请高手看看,这条语句是什么意思?

发表于 : 2013-09-25 17:43
lilydjwg
七彩虹 写了:谢谢onlylove的回答。我明白sed 的意思了, 只是还是不明白 ${0%/*}在做什么。
%/* 应该是把右边的字符串满足pattern /* 的都删了。但是为什么要跟${0} 放在一起?
bash 的变量替换语法是这样子的。

0 是被替换的变量名,% 从右边开始匹配,尽量少匹配,/* 你已经知道啦。%% 是从右边匹配,但是尽量多匹配;# 和 ## 从左边开始。