文字列を取り、関数引数として渡された部分に色を付けたいと思います。
文字列を考えてみましょう
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と[][]
一致する引数です[
(3文字のうちの1つと一致するものと同じ]
)。[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コードに含める必要があるため、これはより脆弱です。少なくとも引用符のないスラッシュは問題を引き起こし、そこにも注入の脆弱性がある可能性があります。また、ここではパターンはシェルパターンではなく正規表現なので[][]
。