Arch 기반 시스템의 파일을 보고 있는데 ~/.bashrc
이해할 수 없는 줄이 보입니다.
[[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true
누군가 이것을 설명하거나 이 비교가 자세히 설명되어 있는 bash 문서를 알려줄 수 있습니까? 나는 그것에 대해 아무것도 모르기 때문입니다.
중요한 경우에는 다음 safe_term
과 같이 정의되는 match_lhs
방법을 보여주는 발췌문이 있습니다.
use_color=false
# Set colorful PS1 only on colorful terminals.
# dircolors --print-database uses its own built-in database
# instead of using /etc/DIR_COLORS. Try to use the external file
# first to take advantage of user additions. Use internal bash
# globbing instead of external grep binary.
safe_term=${TERM//[^[:alnum:]]/?} # sanitize TERM
match_lhs=""
[[ -f ~/.dir_colors ]] && match_lhs="${match_lhs}$(<~/.dir_colors)"
[[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(</etc/DIR_COLORS)"
[[ -z ${match_lhs} ]] \
&& type -P dircolors >/dev/null \
&& match_lhs=$(dircolors --print-database)
[[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true
답변1
[[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]]
분석해 보면 [[ string == pattern ]]
문자열과 패턴 일치를 비교한 것입니다. 여기서 패턴은 *
"무엇이든"을 의미합니다. 오른쪽에는 고정된 문자열이며 변수의 내용을 제공하는 $'\n'
개행 문자가 있습니다 . 따라서 예를 들어 is include 인 경우 문자열 과 그 앞이나 뒤의 모든 항목을 찾습니다 . 왼쪽에는 또 다른 개행 문자와 포함된 내용이 있습니다.TERM
${safe_term}
${safe_term}
xterm
<newline>TERM xterm
${match_lhs}
이제 다음과 같은 줄을 포함하도록 출력을 ${match_lhs}
설정합니다 .dircolors --print-database
TERM Eterm
TERM ansi
TERM *color*
...
실제로 두 구성 파일을 먼저 읽으려고 시도하지만 비슷한 항목이 포함되어야 한다고 가정했습니다.
${safe_term}
의 값은 $TERM
약간의 정리만 포함됩니다(일부 이전 행).
따라서 사실상 현재 터미널 유형이 $TERM
나열된 알려진 터미널 유형에 포함되어 있는지 여부를 테스트합니다 dircolors
.
개행 문자는 일치 항목을 줄의 시작 부분에 고정하는 데 사용되며, 첫 번째 줄이 일치하는 경우 왼쪽에 있는 추가 개행 문자가 사용됩니다(그렇지 않으면 앞에 개행 문자가 없습니다).
여기서 혼란스러운 점은 적어도 내 시스템에서는 의 출력에 , 및 dircolors --print-database
과 같은 줄이 포함된다는 것입니다 . 이것들은 유효한 패턴이지만 여기 스크립트는 패턴으로 사용하지 않는 것 같습니다.TERM *color*
TERM con[0-9]*x[0-9]*
TERM xterm*
왼쪽옆 [[ str == pattern ]]
. 내가 잘못 이해했거나 스크립트 작성자가 실수를 했을 수도 있습니다.