Нет. Символическая ссылка относится только к имени/пути цели, а не к содержимому.
%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.
%
можно использовать флаг расширения параметра:
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
(, который по умолчанию является пробелом, но был явно установлен выше ).