免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3099 | 回复: 13
打印 上一主题 下一主题

有关/etc/profile里的一点疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-12 09:28 |只看该作者 |倒序浏览
这是文件/etc/profile里的语句:

for i in /etc/profile.d/*.sh ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null 2>&1
        fi
    fi
done

我想问一下第二个if语句里的  "${-#*i}" 怎么理解,是什么知识点!

请高手帮忙解下惑,谢谢!

论坛徽章:
0
2 [报告]
发表于 2012-07-12 09:35 |只看该作者
没有知道的吗!在线等ing

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
3 [报告]
发表于 2012-07-12 09:45 |只看该作者
qazxsw9999 发表于 2012-07-12 09:28
我想问一下第二个if语句里的  "${-#*i}" 怎么理解,是什么知识点!


${} 这个是 Bash 变量展开语法,- 是 Bash 的特殊变量,${para#word} 这个是 Bash 的变量展开的特殊功能,用来去掉 para 的值的前缀。

这些东西在 bash 的手册中都能查到。如果你用其他 Shell 的话,那就查查你所用 Shell 的手册。

论坛徽章:
0
4 [报告]
发表于 2012-07-12 10:01 |只看该作者
谢谢了,我查一下手册。

论坛徽章:
0
5 [报告]
发表于 2012-07-12 11:30 |只看该作者
回复 3# MMMIX


    能不能帮我分析下第二个if语句到底要判断什么??

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2012-07-12 11:48 |只看该作者
本帖最后由 MMMIX 于 2012-07-12 12:13 编辑

回复 5# qazxsw9999


    判断是否是 interactive shell

论坛徽章:
0
7 [报告]
发表于 2012-07-12 12:32 |只看该作者
回复 6# MMMIX


    弱弱的问一下,什么事interactive shell,度娘她不告诉我!!

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2012-07-12 12:39 |只看该作者
回复 7# qazxsw9999


    Bash 手册会告诉你的。

论坛徽章:
0
9 [报告]
发表于 2012-07-12 12:47 |只看该作者
回复 8# MMMIX


    明白了谢谢!!  还是手册最全,虽然不是很详细!

论坛徽章:
0
10 [报告]
发表于 2012-07-12 13:47 |只看该作者
自己总结一下收获:
首先是shell的特殊变量


变量        含义
$0        脚本名字
$1        位置参数 #1
$2 - $9        位置参数 #2 - #9
${10}        位置参数 #10
$#        位置参数的个数
"$*"        所有的位置参数(作为单个字符串) *
"$@"        所有的位置参数(每个都作为独立的字符串)
${#*}        传递到脚本中的命令行参数的个数
${#@}        传递到脚本中的命令行参数的个数
$?        返回值
$$        脚本的进程ID(PID)
$-        传递到脚本中的标志(使用set)
$_        之前命令的最后一个参数
$!        运行在后台的最后一个作业的进程ID(PID)


在此之前不是很明白$- 的具体含义,现在知道了它表示通过set命令为shell设置的特定模式。

然后是字符串操作 ${parameter#word} ,这个还比较理解,但以前不知道word中可以用'?'、'*'等正则表达式的通配符。


最后if [ "${-#*i}" != "$-" ]实际上是为了判断'$-'中是否有'i',即set是否为shell设置了'i‘模式。(-i  如果有 -i 选项,shell 将交互地执行 ( interactive )。)


其实这些知识点bash手册中都有,但作为新手把他联系起来还是有一定困难。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP