문자열을 가져와 함수 인수로 전달된 부분에 색상을 지정하고 싶습니다.
문자열을 고려해보세요
str="[Title] Some Description"
그럼 전화해
glow "[" "]" "$str"
나머지는 기본 터미널 색상을 유지하면서 대괄호를 파란색으로 표시합니다. 이는 기본 터미널 색상을 사용함 Title
을 의미합니다.Some Description
random
단어를 파란색으로 색칠하는 또 다른 예에서는
str="This is some random sentence."
glow "random" "$str"
답변1
이것이 당신이 원하는 것입니까?
#!/bin/bash
glow() {
l=$1
r=$2
str=$3
glow_on='\E[37;46;1m'
glow_off='\E[0m'
strl=${str/$l/$glow_on$l}
strlr=${strl/$r/$r$glow_off}
echo -e "$strlr"
}
glow "[" "]" "[Title] Some Description"
답변2
최근 Bash(지원됨 patsub_replacement
, 아마도 5.2를 의미함)에서는 다음과 같이 작동할 수 있습니다.
color_me_blue() {
blue=$'\e[1;34m'
normal=$'\e[0m'
pattern="$1"
string="$2"
string=${string//$pattern/$blue&$normal}
echo "$string"
}
color_me_blue '[][]' '[hello] there'
str="This is some random sentence."
color_me_blue 'random' "$str"
첫 번째 인수는 쉘 패턴으로 처리되며 or와 [][]
일치하는 인수입니다 [
(세 문자 중 하나와 일치하는 것과 동일 ]
).[abc]
교체된 문자열을 다시 제자리에 배치하는 데 대한 지원이 없으면 더 어렵습니다. 따라서 오래된 Bash의 경우 비용을 지불해야 한다고 생각합니다 sed
.
sed_me_blue() {
blue=$'\e[1;34m'
normal=$'\e[0m'
regex="$1"
string="$2"
string="$(sed -e "s/$regex/$blue&$normal/" <<< "$string")"
echo "$string"
}
패턴이 sed 코드에 포함되어야 하기 때문에 이는 더 취약합니다. 적어도 따옴표가 없는 슬래시는 문제를 일으키며 거기에도 주입 취약점이 있을 수 있습니다. 또한 여기서 패턴은 쉘 패턴이 아닌 정규식이므로 [][]
.