如何解决鱼壳-嵌套引号内插
我试图编写一个fish函数来在长命令完成运行后显示通知。我可以使用它,但是我想知道是否有更好的方法来使插值与嵌套引号一起使用。
function record_runtime --on-event fish_postexec
set text \"$argv took $CMD_DURATION\"
set command "display notification $text"
if [ $CMD_DURATION -gt 60000 ]
osascript -e "$command"
end
end
我希望有一个像osascript -e 'display notification "$argv took $CMD_DURATION"'
这样的班轮,但找不到有效的组合。
解决方法
因此,您要做的是使用一个参数执行osascript
,该参数包含命令“ display notification”和$ argv的 value ,单词“ took”和$ CMD_DURATION的值。这意味着您希望鱼扩展这些变量。
重要的是,fish不会以单引号(''
)扩展变量,这就是您其他尝试失败的原因。变量只能用双引号或完全用引号引起来。
现在我没有要测试的macOS机器,但是如果osascript也允许单引号,则很简单:
function record_runtime --on-event fish_postexec
if [ $CMD_DURATION -gt 60000 ]
osascript -e "display notification '$argv took $CMD_DURATION'"
end
end
双引号中的单引号没有特殊含义,因此$argv
和$CMD_DURATION
被扩展。
如果osascript在这里需要双引号,则必须转义内部的双引号:
function record_runtime --on-event fish_postexec
if [ $CMD_DURATION -gt 60000 ]
osascript -e "display notification \"$argv took $CMD_DURATION\""
end
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。