【问题标题】:Exporting builtin variables in bash script在 bash 脚本中导出内置变量
【发布时间】:2016-02-02 10:23:15
【问题描述】:

这可能是一个微不足道的问题,但是在 shell 脚本中使用内置变量的正确方法是什么?例如,如果我想编写一个打开默认文本编辑器的脚本,该编辑器在 $EDITOR 中指定。只是使用

export EDITOR

不会有帮助。我发现定义 EDITOR 变量有助于解决这个问题:

#!/bin/bash    
export EDITOR=vim
$EDITOR

上述方法可行,但有没有一种方法可以在不定义变量的情况下导出它?提前致谢。

【问题讨论】:

  • 那会完成什么?不,您不能导出不存在的东西。你为什么要从只运行你刚刚定义的东西的脚本中导出一些东西?您似乎对 export 的作用感到困惑。也许您应该更新您的问题以解释您为什么要问这个。
  • 也许这有帮助?一个常见的场景是,如果定义了EDITOR,您想运行它,否则回退到nano。一种紧凑且惯用的方法是${EDITOR-nano}

标签: bash shell built-in


【解决方案1】:

EDITOR 不是“内置”变量,您可以随时将其导出(即使其成为环境变量)。这里没有什么神奇的。虽然 bash 确实在某些情况下会解释这个变量,但应用程序在想要启动编辑器时访问这个变量是很常见的,所以在实践中,EDITOR 通常被导出。例如,我的 .zshrc 和 .bashrc 中有一行

export EDITOR=nano

对于你的问题:你可以导出一个带有 empty 值的变量,像这样

export EDITOR=

但我看不出你会从中得到什么。

如果你只是想确保你的 shell 脚本和所有后代进程都设置了 EDITOR,一个常见的习惯用法是

: ${EDITOR:=vim}
export EDITOR

如果你的脚本的用户没有定义这个变量,它被设置在这里 - 你只需要两行,因为 bash 语法不允许将它组合成一个。

【讨论】:

  • 您可以使用export EDITOR=${EDITOR:-vim} 将其折叠为一行,但可以说这并不比仅使用两行更好。
  • 我喜欢你的建议。从维护的角度来看,它比 IMO 稍微好一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多