新しい行に文字列を書き込む次の関数があります。警告オプションがあるため、-w
ユーザーが設定すると一部の行が赤に変わります。 -w
オプションの数値引数が許可されます-wNUM
。NUM
指定しないと、最初の行のみが赤にwarn
設定されます。1
コマンドの呼び出しに問題があります。
printfm -w -- "First line" "second line"
)。
local warn="1"
氏名の前に含めましたcase
。
("-w"|"--warning")
local warn="1"
case "$2" in
機能はここにリストされています。
printfm ()
{
# Process command line options
shortopts="hVw::"
longopts="help,version,warning::"
opts=$(getopt -o "$shortopts" -l "$longopts" -n "${0##*/}" -- "$@")
if [ $? -ne 0 ]; then
local shorthelp=1 # getopt returned (and reported) an error.
return
fi
local f=0
if [ $? -eq 0 ]; then
eval "set -- ${opts}"
while [ $# -gt 0 ]; do
case "$1" in
("-V"|"--version")
printf "%s\n" "V01 Jul 2021 Wk27"
declare -i f=0
shift
break
;;
("-h"|-\?|"--help")
printf "%s\n" "Print strings."
declare -i f=0
shift
break
;;
# ------------------------------------
("-w"|"--warning")
case "$2" in
(+([[:digit:]]))
local -r warn="$2"
shift 2
;;
(*)
local -r warn="1"
shift 2
;;
esac
declare -i local f=1
;;
# ----------------------------------------
(--)
declare -i local f=1
shift
break
;;
esac
done
fi
red=$(tput setaf 9)
rgl=$(tput sgr0)
# Print normal text or warnings
if [[ -v $f ]] && (( f != 0 )); then
# print normal multi-line text
[[ ! -v $warn ]] && printf '%s\n' "$@"
# print multi-line warnings
rge='^[0-9]+$'
if [[ -v $warn && "$warn" == "1" ]]; then
printf '%s\n' ${red}"$1"${rgl} # first line red
printf '%s\n' "${@:2}" # remaining, uncoloured
elif [[ -v $warn && "$warn" =~ $rge ]]; then
printf '%s\n' ${red}"$@"${rgl} # all lines red
fi
fi
return 0
}