【问题标题】:Finding all the Enviorment Variables in Bash在 Bash 中查找所有环境变量
【发布时间】:2020-08-18 04:21:24
【问题描述】:

我最近有一本关于 bash 中的 shell 脚本的书。它声明使用 printenv 命令列出所有环境变量。我注意到这并没有列出所有变量,例如 $PWD 或 $REPLY 或 $SSH_TTY。它们是我可以参考的所有这些环境变量及其函数的完整列表吗?

【问题讨论】:

  • $REPLY 是来自 shell 而非环境的内置变量。对于您的问题,请尝试declare -x
  • set 命令可能会做你想做的事。
  • 环境变量和shell内置变量有什么区别?它们都是由外壳而不是用户设置的?
  • 关于最初的问题,setdeclare -x 似乎对我有用。谢谢
  • printenv 将显示所有在您当前的shell中设置的环境变量。它没有显示所有可以设置(从技术上讲,您几乎可以将任何字符串设置为环境变量)。在某些情况下(例如在 ssh 会话中)有大量 将被设置;或者,如果设置,将具有特殊功能(例如 LANGLC_* 变量,它们会告诉程序使用什么语言环境;参见 man locale)。没有这些的完整列表,因为任何编写程序的人都可以让它创建/响应他们想要的任何变量,从而创建一个新变量。

标签: bash shell unix environment-variables documentation


【解决方案1】:

在 bash 这样的 shell 中,有两种类型的变量; environment variables (Wikipedia) 和 shell variables。有多个predefined shell variables

您可以使用 export 内置函数将 shell 变量“提升”为环境变量,从而使该变量可用于从 shell 启动的任何子进程。

顾名思义,printenv 只报告进程的环境变量。 PWDREPLY 等变量是 shell 变量,因此不会显示。正如 cmets 中所建议的,不带参数调用 set 将打印当前会话中可用的所有变量(环境和 shell)。

【讨论】:

    【解决方案2】:

    要显示可以使用的环境变量列表

    set
    
    #if you want to see it nicely you can pipe it to more like this
    set | more
    

    【讨论】:

    • set 将同时显示 shell 和环境变量,不区分哪个是哪个。
    • @OdedBD :OP 明确要求提供 environment 变量。除此之外,set 确实很有用,我们应该指出,它还额外列出了功能。
    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2018-09-20
    相关资源
    最近更新 更多