我认为这很简单,但我自己还没有弄清楚。如何以非常简洁的方式为变量赋值并将该值复制到剪贴板?
也就是说,像这样
zsh=$(which zsh) | pbcopy
我现在所拥有的以及对我有用但不够简洁的是:
zsh=$(which zsh); echo $zsh | pbcopy
我认为这很简单,但我自己还没有弄清楚。如何以非常简洁的方式为变量赋值并将该值复制到剪贴板?
也就是说,像这样
zsh=$(which zsh) | pbcopy
我现在所拥有的以及对我有用但不够简洁的是:
zsh=$(which zsh); echo $zsh | pbcopy
你可以这样做:
=cmd
是文件名扩展运算符,它扩展为在 中找到的第一个命令的路径$PATH
。与which
内置输出类似,不同之处在于它会扩展为外部命令路径,即使还有同名的别名/函数/内置/关键字(因此更像which -p
)。${var::=value}
是一个类似于 Bourne 的zsh参数扩展运算符${var=value}
,${var:=value}
不同之处在于它无条件地设置$var
为value
(无论变量是设置、空还是其他)。<<<
是 here-string重定向运算符(另一个 zsh 扩展,许多其他 shell 都复制了它)。与 Bourne 的<<
here-doc 一样,它是一个重定向运算符,用于重定向已删除的临时文件的输入。此处,临时文件将用后面的字符串加上换行符填充。在中
pbcopy<<<${var::=value}
,重定向将在最终执行的子进程中完成pbcopy
,因此随后分配将会丢失。因此在这里,我们重定向在当前 shell 进程中运行的命令组(
{...}
),这样分配就不会丢失,并且该命令组pbcopy
在子进程中运行(继承该 stdin)。<<<
为了避免在 case 中添加的换行符pbcopy
(例如xclip
without-r
)不会删除它,您可以使用:尽管这并不短于:
我不知怎的认为你可以使用参数扩展来设置变量,然后输出它并通过管道传输它:
但这是不正确的,该变量是在子shell中设置的。
muru 的变体基于如何将命令输出传送到两个单独的命令并存储输出,比您现有的命令和上面的错误命令短:
并可以使用multios进一步缩短: