В моем .bash_profile
есть функция для печати текста предварительно написанного текста и его копирования в буфер обмена.
copyandprint () {
s='\\033[1;32m' #strong
n='\\033[0m' #normal
printf -- "printf -- '$1' | pbcopy;" #pbcopy copies to clipboard in macOS
printf -- "echo -e copied '${s}$1${n}' to clipboard"
}
Я использую это для псевдонимов, которые я постоянно хочу вставить в другие приложения, такие как статические идентификаторы или просто глупые вещи, которые сложно быстро набрать на клавиатуре.
alias shrug=$( copyandprint '¯\_(ツ)_/¯')
copied ¯_(ツ)_/¯ to clipboard">
Но когда я хотел использовать его с текстом, сгенерированным в то время, когда я использую псевдоним , я не могу просто вызвать его в определении псевдонима; псевдоним должен вызывать его.
alias copydate=$( copyandprint "$(date)" )
Значение генерируется при запуске сценария, а не при использовании псевдонима.
Через довольно много проб и ошибок я смог сделать модифицированную версию функции, которая делает то, что я хотел:
copyandprint_live () {
s='\\033[1;32m' #strong
n='\\033[0m' #normal
printf -- "$1" | pbcopy
printf -- "echo -e copied ${s}$1${n} to clipboard"
}
alias copydate_live="\$( copyandprint_live \"\$(date)\" )"
Дата генерируется во время использования псевдонима, а не во время выполнения сценария.
Но когда я использую эту функцию так же, как и другую, она не работает:
alias shrug_2=$( copyandprint_live '¯\_(ツ)_/¯')
$ shrug_2
#=> -bash: syntax error near unexpected token `ツ'
И я пытался поставить двойные кавычки, но это не сработало
alias shrug_3=$( copyandprint_live '"¯\_(ツ)_/¯"')
$ shrug_3
#=> copied 033[1
#=> -bash: 32m¯\_(ツ)_/¯033[0m: No such file or directory
Мой вопрос: что здесь происходит? Почему они должны быть такими разными?