免费注册 查看新帖 |

Chinaunix

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

[系统管理] 这块代码什么功能 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2018-06-13 11:51 |只看该作者 |倒序浏览
file_env() {
        local var="$1"
        local fileVar="${var}_FILE"
        local def="${2:-}"
        if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
                echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
                exit 1
        fi
        local val="$def"
        if [ "${!var:-}" ]; then
                val="${!var}"
        elif [ "${!fileVar:-}" ]; then
                val="$(< "${!fileVar}")"
        fi
        export "$var"="$val"
        unset "$fileVar"
}

这块代码里的  "${!var:-}"是什么意思??

我自己在shell命令行中测试echo "${!<变量名>:-}"都是输出空行,而且把这个指令放到if中,if里的代码块不会执行。。

论坛徽章:
0
2 [报告]
发表于 2018-06-13 13:20 |只看该作者
好吧, 我想我已经搞明白了,代码块中if判断语句的意思是,检查是否有var变量中值的变量设置,
ie:
var=abc
则检查变量abc是否设置,如果设置为真,否则为假

论坛徽章:
4
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:2115-16赛季CBA联赛之佛山
日期:2019-02-14 09:26:31
3 [报告]
发表于 2018-06-13 14:01 |只看该作者
回复 2# aaoonn

  1. [root@ct7 ~]# test "${var:-}" && echo yes || echo no
  2. yes
  3. [root@ct7 ~]# test "${var1:-}" && echo yes || echo no
  4. no
  5. [root@ct7 ~]# test "${var2:-}" && echo yes || echo no
  6. no
  7. [root@ct7 ~]# test "${!var:-}" && echo yes || echo no
  8. no
  9. [root@ct7 ~]# test "${!var1:-}" && echo yes || echo no
  10. no
  11. [root@ct7 ~]# test "${!var2:-}" && echo yes || echo no
  12. no
复制代码

其中 var=有值 var1=空值 var2=无值
我还是看不懂 ${!var2:-},特别是前面那个感叹号,查了bash官方的文档,也没查到有这么写的,前面那个叹号何解?只要前面有个叹号,你这里IF出来的全部是 False 无疑,我这里用bash5.0版本试的 也是如此,跪求解释下那个叹号.
再说了 :- 这后面不跟任何东西,空格也没,为什么要这么写?感觉毫无意义,如果只为了判断变量是否空值,-z -n 都可以,:- 也做不了这个判断吧,
太高级了,实在是看不懂,求解析






论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-10-11 06:20:0015-16赛季CBA联赛之山东
日期:2016-05-28 18:18:5615-16赛季CBA联赛之新疆
日期:2017-04-12 22:55:4715-16赛季CBA联赛之青岛
日期:2017-06-26 18:30:0315-16赛季CBA联赛之四川
日期:2017-09-04 12:27:0315-16赛季CBA联赛之福建
日期:2018-02-09 14:28:3315-16赛季CBA联赛之同曦
日期:2018-04-17 12:43:3415-16赛季CBA联赛之浙江
日期:2018-07-14 13:27:4015-16赛季CBA联赛之吉林
日期:2018-09-13 15:48:2915-16赛季CBA联赛之新疆
日期:2016-05-07 05:05:3215-16赛季CBA联赛之八一
日期:2016-03-14 12:32:06程序设计版块每日发帖之星
日期:2015-12-12 06:20:00
4 [报告]
发表于 2018-06-13 14:24 |只看该作者
装逼写法,判断变量不否为空   -z   -n  都行

论坛徽章:
0
5 [报告]
发表于 2018-06-13 14:43 |只看该作者
回复 3# christmas1102

这个函数里的if 判断,是检查var 变量的值所对应的变量是否设置,注意var变量的值是另外一个变量。你可以测试一下
abc=1
var='abc'
if [ "${!var:-}" ]; then
echo 111
fi
会打印111

unset abc之后不会打印111

论坛徽章:
0
6 [报告]
发表于 2018-06-13 14:44 |只看该作者
回复 3# christmas1102

这个函数里的if 判断,是检查var 变量的值所对应的变量是否设置,注意var变量的值是另外一个变量。你可以测试一下
abc=1
var='abc'
if [ "${!var:-}" ]; then
echo 111
fi
会打印111

unset abc之后不会打印111

论坛徽章:
0
7 [报告]
发表于 2018-06-13 14:47 |只看该作者
回复 3# christmas1102

这个函数里的if 判断,是检查var 变量的值所对应的变量是否设置,注意var变量的值是另外一个变量。你可以测试一下
abc=1
var='abc'
if [ "${!var:-}" ]; then
echo 111
fi
会打印111

unset abc之后不会打印111

论坛徽章:
0
8 [报告]
发表于 2018-06-13 14:48 |只看该作者
回复 3# christmas1102

这个函数里的if 判断,是检查var 变量的值所对应的变量是否设置,注意var变量的值是另外一个变量。你可以测试一下<code>
abc=1
var='abc'
if [ "${!var:-}" ]; then
echo 111
fi
</code>
上面代码会打印111

unset abc之后不会打印111

论坛徽章:
0
9 [报告]
发表于 2018-06-13 14:49 |只看该作者
回复 3# christmas1102

这个函数里的if 判断,是检查var 变量的值所对应的变量是否设置,注意var变量的值是另外一个变量。你可以测试一下
  1. abc=1
  2. var='abc'
  3. if [ "${!var:-}" ]; then
  4. echo 111
  5. fi
复制代码
上面代码会打印111
unset abc之后不会打印111

论坛徽章:
0
10 [报告]
发表于 2018-06-13 14:56 |只看该作者
回复 4# baby_神

不是的,他是想检查var变量指向的变量是否设置。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP