전체 컨텍스트 코드 줄:
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
)를 실행합니다.
return n
a가 함수 내에서 실행 되면 해당 지점에서 함수 실행이 중지되고 반환됩니다.n
따라서 반환하면 반환하고 그렇지 않으면 strstr
반환하십시오.1
[ "${1#*$2*}" = "$1" ]
0
0
[
"test" 내장 함수의 동의어입니다.
[ str1 = str2 ]
0
문자열이 동일한지 여부를 반환합니다.
$1
에 전달된 첫 번째 매개변수이고 strstr
, $2
두 번째 매개변수이며 "${1#*$2*}"
,쉘 매개변수 확장의 $1
:
${매개변수#단어}패턴이 매개변수 확장 값의 시작과 일치하는 경우 확장 결과는 가장 짧은 일치 패턴("#"의 경우) 또는 가장 긴 일치 패턴("##"의 경우)이 있는 매개변수 확장 값이 됩니다. 제거됨.
$1
따라서 이것은 가장 짧은 일치인 으로 확장됩니다 *$2*
(< 이것은패턴 매칭), 삭제되었습니다. 이 확장된 값은 전체 값 $1
(이건 그냥~ 고 싶어요$1
포함 되어 있는지 확인하는 방법$2
).
좋아요, 이제 $1
and 는 무엇인가요 $2
?
$2
매우 간단 rd.live.image
하고
$1
파일 내용이에요/proc/cmdline
/proc/cmdline
: 이 파일은 시작 시 커널에 전달된 매개변수를 보여줍니다.
그런 다음 마지막으로:
strstr "`cat /proc/cmdline`" rd.live.image는 무엇을 합니까?
rd.live.image
시작 시 커널에 전달된 인수에 포함되는지 확인합니다 . 이 경우에는 가 반환되고 0
, 그렇지 않으면 가 반환됩니다 1
.