упростить повторяющийся ввод в printf bash - PullRequest
0 голосов
/ 09 апреля 2020

Вместо нескольких ${DOWN} можно ли повторять x раз?

readonly RED='\033[0;31m'
readonly NC='\033[0m' # No Color
readonly DOWN='\xE2\x96\xBC'
printf "%b%b%b%b look down %b%b%b%b\n" "${RED}" "${DOWN}" "${DOWN}" "${DOWN}" "${DOWN}" "${DOWN}" "${DOWN}" "${NC}"

▼▼▼ look down ▼▼▼

1 Ответ

0 голосов
/ 10 апреля 2020

Используйте некоторую команду, чтобы повторить нисходящую строку.

printf "%b%b%b%b look down %b%b%b%b\n" "${RED}" $(yes "${DOWN}" | head -6) "${NC}"
# or
printf "%b%b%b%b look down %b%b%b%b\n" "${RED}" $(for ((i=0;i<6;i++)); do echo "${DOWN}"; done) "${NC}"
# or
printf "%b%b%b%b look down %b%b%b%b\n" "${RED}" $(echo {1..6} | sed "s/[^ ]*/${DOWN}/g") "${NC}"

При использовании вышеуказанных решений вам нужно посчитать количество %b используемых вами.
Возможно, вы хотите что-то вроде

msg=" look down "
count=10
for ((i=0;i<${count};i++)); do
    msg="${DOWN}${msg}${DOWN}"
done
printf "%b%b%b\n" "${RED}" "${msg}" "${NC}"

Не printf "%b$msg%b\n" "${RED}" "${NC}", это происходит неправильно, если у msg есть %.

...