Как изменить входные переменные с помощью строковых модификаторов в zsh?

Нет. Символическая ссылка относится только к имени/пути цели, а не к содержимому.

2
02.08.2020, 00:42
2 ответа

%Bи %bявляются примерами последовательностей подсказок и обычно могут использоваться только для форматирования подсказок. Для обычного сценария вы можете использовать команду tputдля достижения желаемого:

echo "$(tput bold)$1$(tput sgr0)"

Кроме того, вы можете напрямую вывести escape-коды ECMA -48("ANSI" ). Я бы не рекомендовал это, потому что это менее переносимо между терминалами. (В настоящее время, в 21 веке, довольно сложно встретить терминал, который не поддерживает ECMA -48 и базовые функции ECMA -48 SGR, такие как выделение полужирным шрифтом, но поскольку вы ставите перед собой задачу изучить это, вы должны усвоить, что терминалы не могут гарантировать понимание точно таких же управляющих последовательностей, как друг друга. Вы также должны знать, что все еще остается несколько эмуляторов терминала, где полужирный шрифт — это изменение цвета, а не изменение веса шрифта.)

echo $'\e[1m'"$1"$'\e[22m'

Обратите внимание на использование стиля Korn -в кавычках для управляющих последовательностей. В общем случае команда echoможет или не может сама интерпретировать \eпоследовательности, если они не указаны в стиле Korn -, и такие управляющие последовательности работают по-разному в разных оболочках или даже в разных версиях та же оболочка; и наоборот, не все оболочки понимают цитирование в стиле Korn -. См. " Почему printf лучше, чем echo? " для всей истории и почему echoне является хорошей идеей, если вы обращаетесь к чему-то другому, кроме одной конкретной (версии оболочки )..

printf '\e[1m%s\e[22m' "$1"

Обратите внимание, что SGR 0 (, соответствующий \e[0m,это то, что tput sgr0также обычно в настоящее время испускает )выключает все , что может быть не тем, что вам нужно, если вы также используете подчеркивание, курсив, цвета, перевернутое видео, или другие графические изображения. Чтобы отключить жирный шрифт , в частности , SGR 22 — это код представления графики, который отключает полужирный и бледный шрифт, восстанавливая «средний» вес шрифта. (Последовательность управления окончанием S et G raphic R позволяет установить четыре веса шрифта :полужирный, полужирный, средний и светлый.)

Поскольку вы используете оболочку Z, вы можете также использовать собственную встроенную -в printкоманду вместо использования echoили printfвообще. Можно сказать, что встроенный -в printпонимает последовательности расширения подсказок оболочки Z :

.
print -P '%B'"$1"'%b'

Конечно, ваша строка $1не должна содержать ни других последовательностей расширения, ни каких-либо управляющих последовательностей SGR для смены полужирного шрифта. И это не усложнит вам изучение tputтого, как работают возможности terminfo.

1
18.03.2021, 23:15

%можно использовать флаг расширения параметра:

echo "${(%):-%B}$1${(%):-%b}"

Zsh имеет printвстроенную функцию, которая имеет -Pдля выполнения расширений подсказок (Примечание :Если $1 содержит последовательности подсказок, они будут интерпретироваться как таковые):

print -P -- "%B$1%b"

Вы можете захотеть напечатать все аргументы вместо только первого позиционного параметра (используйте $@/$*).

Вы можете ничего не печатать (даже символ новой строки )если параметры не были заданы (печатать, только если $#больше нуля, или использовать +раскрытие параметров и сообщение printдля вывода столбцов ).

Вы можете захотеть отключить эхо -, например, интерпретацию символов обратной косой черты(print -r).

print_bold() {
  local IFS=' '
  print -rC1 -- ${1+"${(%):-%B}$*${(%):-%b}"}
}

"$*"расширяется до позиционных параметров, разделенных первым символом IFS(, который по умолчанию является пробелом, но был явно установлен выше ).

1
18.03.2021, 23:15

Теги

Похожие вопросы