有人可以解释一下: strstr "\`cat /proc/cmdline\`" rd.live.image 的作用是什么?

有人可以解释一下: strstr "\`cat /proc/cmdline\`" rd.live.image 的作用是什么?

完整的代码上下文行:

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" ]除非 command10&&) 将执行command2( return 1)。

当 areturn n在函数内执行时,它将在该点停止函数执行,并返回n

所以如果返回则返回,否则strstr返回。1[ "${1#*$2*}" = "$1" ]00

[是“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

相关内容