【发布时间】:2018-11-10 05:20:41
【问题描述】:
我的.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"
}
我用它来为我一直想粘贴到其他应用程序中的内容设置别名,例如静态 ID,或者只是难以在键盘上快速键入的愚蠢内容。
alias shrug=$( copyandprint '¯\_(ツ)_/¯')
但是当我想将它与生成的文本一起使用时在我使用别名时,我不能只在别名定义中调用它;别名需要调用它。
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
我的问题是,这里发生了什么?为什么它们需要如此不同?
【问题讨论】: