完整的代码上下文行:
if ! strstr "\`cat /proc/cmdline\`" rd.live.image || [ "\$1" != "start" ]; then
exit 0
fi
斯特斯特定义为:
strstr() {
[ "${1#*$2*}" = "$1" ] && return 1
return 0
}
附加信息:代码来自fedora-live-base.ks。 Fedora 提供的基本 kickstarter 文件。我试图了解 ks 文件的大部分功能。我正在努力处理文件的很多脚本部分。
答案1
strstr() {
[ "${1#*$2*}" = "$1" ] && return 1
return 0
}
command1 && command2
无论如何,这都会执行command1
( ),然后,[ "${1#*$2*}" = "$1" ]
除非 command1
回0
(&&
) 将执行command2
( return 1
)。
当 areturn n
在函数内执行时,它将在该点停止函数执行,并返回n
所以如果返回则返回,否则strstr
返回。1
[ "${1#*$2*}" = "$1" ]
0
0
[
是“test”内置函数的同义词。
[ str1 = str2 ]
0
如果字符串相等则返回。
$1
它是传递给 的第一个参数strstr
,$2
是第二个参数,并且"${1#*$2*}"
是Shell 参数扩展的$1
:
${参数#word}如果模式与参数扩展值的开头匹配,则扩展的结果是具有最短匹配模式(“#”情况)或最长匹配模式(“##”情况)的参数扩展值已删除。
因此,这将扩展到$1
,最短匹配*$2*
(< this is模式匹配) 开头,已删除。然后,该扩展值将与完整值进行比较$1
(这只是一个想要检查是否$1
包含的方法$2
)。
好的,现在,什么是$1
和$2
?
$2
很简单rd.live.image
,并且
$1
是文件的内容/proc/cmdline
/proc/cmdline
:该文件显示了启动时传递给内核的参数。
然后,最后:
strstr“`cat /proc/cmdline`” rd.live.image 的作用是什么?
正在检查rd.live.image
启动时传递给内核的参数中是否包含 。在这种情况下,它将返回0
,否则,它将返回1
。