Fish shell - 嵌套引号中的插值
Fish shell - Interpolation in nested quotes
我正在尝试编写一个 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
,该参数包含命令“显示通知”和 $argv 的 值,单词"take" 和 $CMD_DURATION 的值。这意味着您希望 fish 展开 这些变量。
重要的是,fish 不会扩展 single-quotes (''
) 中的变量,这就是您的其他尝试失败的原因。变量仅在 double-quotes 内或完全在引号外展开。
现在我没有macOS机器测试,但是如果osascript也允许单引号,这个就简单了:
function record_runtime --on-event fish_postexec
if [ $CMD_DURATION -gt 60000 ]
osascript -e "display notification '$argv took $CMD_DURATION'"
end
end
double-quotes里面的single-quotes没有特殊意义,所以把$argv
和$CMD_DURATION
展开了。
这里如果osascript需要double-quotes,就得转义里面的double-quotes:
function record_runtime --on-event fish_postexec
if [ $CMD_DURATION -gt 60000 ]
osascript -e "display notification \"$argv took $CMD_DURATION\""
end
end
我正在尝试编写一个 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
,该参数包含命令“显示通知”和 $argv 的 值,单词"take" 和 $CMD_DURATION 的值。这意味着您希望 fish 展开 这些变量。
重要的是,fish 不会扩展 single-quotes (''
) 中的变量,这就是您的其他尝试失败的原因。变量仅在 double-quotes 内或完全在引号外展开。
现在我没有macOS机器测试,但是如果osascript也允许单引号,这个就简单了:
function record_runtime --on-event fish_postexec
if [ $CMD_DURATION -gt 60000 ]
osascript -e "display notification '$argv took $CMD_DURATION'"
end
end
double-quotes里面的single-quotes没有特殊意义,所以把$argv
和$CMD_DURATION
展开了。
这里如果osascript需要double-quotes,就得转义里面的double-quotes:
function record_runtime --on-event fish_postexec
if [ $CMD_DURATION -gt 60000 ]
osascript -e "display notification \"$argv took $CMD_DURATION\""
end
end