zsh vared 命令在 bash 中的对应命令是什么?

zsh vared 命令在 bash 中的对应命令是什么?

我看到了 vared您可以即时编辑指定的环境变量。是否有等效命令狂欢
谢谢

答案1

我不知道有什么东西能像 一样zshvared盒子里bash、在外面工作。

但是,您可以定义一个函数,允许您使用例如编辑环境变量的值vim

function vared {
  [[ $# -eq 1 ]] || { echo "Usage: vared VARNAME" >&2 ; return 1 ; }
  tmpfile=$( command mktemp -t vared.XXXX )
  echo "${!1}" > "$tmpfile"
  command vim "$tmpfile" && export $1="$(< "$tmpfile" )"
  command rm "$tmpfile"
}

称之为vared PATH

它做什么?它创建一个临时文件,将指定变量的当前值写入文件,并vim以临时文件作为参数打开。现在您需要编辑值、保存并退出vim(您可以退出而不保存文件以跳过保存更改)。之后,文件的内容将设置为新变量值,整个内容将被导出,并且临时文件将被删除。command有必要跳过 shell 别名和函数查找,例如,在最后删除文件之前会询问的rm别名rm -i

如果变量不存在或不是环境变量,之后将会如此。

答案2

在 bash 4.x 中你可以做同样的事情

# bash
read -e -p 'edit your path: ' -i "$PATH" PATH

# zsh
vared -p 'edit your path: ' PATH

来源https://stackoverflow.com/questions/2642585/read-a-variable-in-bash-with-a-default-value

文档https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html

答案3

这是基于thecotne 的回答,为 GNU Bash 4.3 编写:

vared(){
    # Based on the zsh builtin of the same name.
    IFS= read -rei "${!1}" "$1"
}

请注意,这与 Zsh 内置命令有一些细微的差别,例如:

  • 如果变量未设置,则不会出错
  • 检查变量名的有效性打印其值(例如vared $
  • 截断多行变量。

相关内容