if 是什么意思?

if 是什么意思?,第1张

概述if 是什么意思?

在我的Oracle linux中,我在/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}和$-的variables。 那是什么意思? 为什么要添加一个else语句来redirect输出? 谢谢!

在arraysbash中存储grep输出

linux:定时执行命令,将stout和sterr都redirect到日志文件并显示在terminal中

为什么卸载Apache2尝试安装PHP5-CGI?

grep / Sed之间的两个标签与多行

首选的terminal脚本语言

$-是一个存储shell设置的当前选项的变量 。

${-#*i}正在使用子字符串移除来从变量的开头移除与模式*i最短的匹配。 所以如果$-具有值abcifOO那么${-#*i}将是fOO 。 (你可以在这里阅读更多关于bash子串的信息。)

这意味着测试

[ "${-#*i}" != "$-" ]

如果变量$-包含选项i ,则表示交互模式打开。

所有这一切意味着只有在交互模式下,输出才会被重定向到/dev/null 。

这是检查外壳是否交互。 当前shell的选项在$-如果删除任何后面i产生不同的结果,这意味着i是旗之一。

不过这将会更具可读性和惯用性:

case $- in *i* ) ... ;; esac

而且,在循环之外进行一次检查会更好。

$-是什么意思?

从手册:

-

(连字符)根据调用,set builtin命令或shell自身设置的选项(例如-i选项)扩展为当前选项标志。

当你以交互方式运行bash , $-可能会扩展到如下所示:

himBH

当你执行脚本时, $-不会有i (除了上面的其他标志)。

${-#*i}是什么意思?

说${-#*i}导致从$-的扩展开始*i的最短匹配被删除。 (请参阅外壳参数扩展 。)

简而言之, if在示例中有条件,则内部意味着在交互模式下执行以下内容:

. "$i" >/dev/null 2>&1

而在非交互模式下,如下:

. "$i"

只是加起来有关$ – 的更多细节。 如果你尝试输入你的终端

[root@zee ~]# echo $- himBH

这些似乎是壳'设置'值

来自info bash --index-search=set片段info bash --index-search=set

'-h'

找到并记住(散列)命令,因为它们被查找执行。 该选项默认启用。

'-m'

作业控制已启用(*注意作业控制::)。

'-B'

shell将执行大括号扩展(* note Brace Expansion::)。 这个选项默认是打开的。

'-H'

启用“!” 样式历史替换(*注意历史交互:)。 对于交互式shell,这个选项默认是打开的。

使用+' rather than – 会导致这些选项被关闭。 这些选项也可以在调用shell时使用。

总结

以上是内存溢出为你收集整理的if 是什么意思?全部内容,希望文章能够帮你解决if 是什么意思?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1264910.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存