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

sh/bash/dash/ksh/zsh等Shell脚本
回复
七彩虹
帖子: 4
注册时间: 2013-09-24 11:12
系统: Windows 7

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

#1

帖子 七彩虹 » 2013-09-24 11:17

小妹刚开始学习shell scripting. 请高手看看,这条语句是什么意思?

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


先谢了。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

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

#2

帖子 eexpress » 2013-09-24 11:22

$() 就是计算
$0就是当前shell
%是去掉字符串的尾巴
|是管道
sed是替换
自己想

证明下你是小妹先

btw 这句估计是小白写的,小妹另外找个师傅吧。
● 鸣学
七彩虹
帖子: 4
注册时间: 2013-09-24 11:12
系统: Windows 7

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

#3

帖子 七彩虹 » 2013-09-24 11:46

谢谢eexpress 的回答。

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

谢谢了。
头像
lxf1992521
帖子: 240
注册时间: 2011-06-26 18:28
联系:

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

#4

帖子 lxf1992521 » 2013-09-24 12:51

这是什么命令啊,太乱了吧。

${0%/*} :我估计他是想就提取当前脚本的文件名。但是$0已经是啦!
onlylove
论坛版主
帖子: 5369
注册时间: 2007-01-14 16:23

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

#5

帖子 onlylove » 2013-09-24 12:52

七彩虹 写了:谢谢eexpress 的回答。

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

谢谢了。
同ee的问题,证明你是小妹先
shell被转的晕晕的
只好回答下sed的问题,sed "s#\.#`pwd`#"是把\.换成pwd的输出,#是定界符,缺省是/的,随便用sed认可的定界符就好了,这边只是为了好认而已吧
\.是把.转义,这只是为了让.表示当前目录本身
#include <stdio.h>
void main()
{
double world;
unsigned letter;
short stay;
long memories;
printf("I miss you.\n");
}
七彩虹
帖子: 4
注册时间: 2013-09-24 11:12
系统: Windows 7

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

#6

帖子 七彩虹 » 2013-09-24 14:18

谢谢onlylove的回答。我明白sed 的意思了, 只是还是不明白 ${0%/*}在做什么。
%/* 应该是把右边的字符串满足pattern /* 的都删了。但是为什么要跟${0} 放在一起?
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

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

#7

帖子 eexpress » 2013-09-24 14:26

那是字符串的掐头去尾,搜索吧。
● 鸣学
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

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

#8

帖子 lilydjwg » 2013-09-25 17:43

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

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