如何评估鱼中的变量
How to evaluate variables in fish
我正在尝试来自 zsh 和 bash 的鱼 shell。我非常想念 $_
位置参数,并试图用一个函数来模仿它。
Fish 在 $history
数组中包含其命令历史记录,其中 $history[1]
是历史记录中的前一行,$history[2]
是前一行,依此类推。
我正在尝试评估这个变量并像这样提取最后一个词
ls -al
echo $history[1] | awk '{print $NF}' // Prints -al
我试过把它放在这样的函数中
function $_ --description 'Fish-patch for the $_ positional parameter'
echo $history[1] | awk '{print $NF}'
end
但它并没有像预期的那样工作。调用 $_
本身按预期工作;
ls -al
$_
它打印 -al
。但是如果$_
作为参数传递给一个函数;
ls -al
echo $_
它打印 echo
。我怀疑它与在子 shell 中评估的 $_
函数有关,我真的不知道。
这里有什么问题?为什么 echo $_
没有按预期工作?
因为 fish 没有全局别名。您给 echo
的参数只是字符串,它们不会被评估为代码。
您必须这样做,这会降低它的可用性。
echo ($_)
我(在某处)找到了一种实现 bash 类似历史的方法 !!
和 !$
:
function fish_user_key_bindings
bind ! bind_bang
bind '$' bind_dollar
# enable editing command line in editor with Alt+v
bind \ev bind_edit_commandline
end
function bind_bang
switch (commandline -t)[-1]
case "!"
commandline -t $history[1]; commandline -f repaint
case "*"
commandline -i !
end
end
function bind_dollar
switch (commandline -t)[-1]
case "!"
commandline -t ""
commandline -f history-token-search-backward
case "*"
commandline -i '$'
end
end
在 fish 中,$_
是一个只读变量,包含最后一个前台作业。但是,您可以使用 $__
或其他字符。
最简单的选择是在每个命令后更新 $__
:
function update_last_arg --on-event fish_postexec
set -g __ (echo $argv | awk '{print $NF}')
end
现在 $__
将始终包含最后一个参数。
我正在尝试来自 zsh 和 bash 的鱼 shell。我非常想念 $_
位置参数,并试图用一个函数来模仿它。
Fish 在 $history
数组中包含其命令历史记录,其中 $history[1]
是历史记录中的前一行,$history[2]
是前一行,依此类推。
我正在尝试评估这个变量并像这样提取最后一个词
ls -al
echo $history[1] | awk '{print $NF}' // Prints -al
我试过把它放在这样的函数中
function $_ --description 'Fish-patch for the $_ positional parameter'
echo $history[1] | awk '{print $NF}'
end
但它并没有像预期的那样工作。调用 $_
本身按预期工作;
ls -al
$_
它打印 -al
。但是如果$_
作为参数传递给一个函数;
ls -al
echo $_
它打印 echo
。我怀疑它与在子 shell 中评估的 $_
函数有关,我真的不知道。
这里有什么问题?为什么 echo $_
没有按预期工作?
因为 fish 没有全局别名。您给 echo
的参数只是字符串,它们不会被评估为代码。
您必须这样做,这会降低它的可用性。
echo ($_)
我(在某处)找到了一种实现 bash 类似历史的方法 !!
和 !$
:
function fish_user_key_bindings
bind ! bind_bang
bind '$' bind_dollar
# enable editing command line in editor with Alt+v
bind \ev bind_edit_commandline
end
function bind_bang
switch (commandline -t)[-1]
case "!"
commandline -t $history[1]; commandline -f repaint
case "*"
commandline -i !
end
end
function bind_dollar
switch (commandline -t)[-1]
case "!"
commandline -t ""
commandline -f history-token-search-backward
case "*"
commandline -i '$'
end
end
在 fish 中,$_
是一个只读变量,包含最后一个前台作业。但是,您可以使用 $__
或其他字符。
最简单的选择是在每个命令后更新 $__
:
function update_last_arg --on-event fish_postexec
set -g __ (echo $argv | awk '{print $NF}')
end
现在 $__
将始终包含最后一个参数。