【问题标题】:Unix user created variablesUnix 用户创建的变量
【发布时间】:2013-09-14 16:23:10
【问题描述】:

我正在经历一些与 Unix 相关的成长烦恼。我的问题:

我希望能够在我的 shell 中打印所有用户定义的变量。假设我在 shell 中执行以下操作:

$ x=9
$ y="Help"
$ z=-18
$ R="My 4th variable"

我将如何进行打印:

x y z R

【问题讨论】:

  • 您只在读取变量值时添加美元符号,而不是在设置时添加。
  • 是的。好电话@mnagel。我想我试图“模仿外壳”。我的老师似乎在他的笔记中做到了这一点,并且它只是延续到我写的内容中。
  • 如果$ 应该代表您的shell 提示符(这是显示交互式命令时的常见约定),请在其后放置一个空格。我会相应地编辑您的问题。

标签: shell variables unix


【解决方案1】:

您应该在运行时首先使用set 记录您的变量,然后再进行比较以查看添加了哪些变量。示例:

#!/bin/bash

set | grep -E '^[^[:space:]]+=' | cut -f 1 -d = | sort > /tmp/previous.txt

a=1234
b=1234

set | grep -E '^[^[:space:]]+=' | cut -f 1 -d = | sort > /tmp/now.txt

comm -13 /tmp/previous.txt /tmp/now.txt

输出:

a
b
PIPESTATUS

请注意,还有其他变量是由 shell 产生的,但不是由用户声明的。您可以使用grep -v 过滤它们。这也取决于外壳。

添加:Grep 和 cut 可能只是一个 sed 一个井:sed -n 's/^\([^[:space:]]\+\)=.*/\1/p'

【讨论】:

    【解决方案2】:

    输入set:

    $ set
    Apple_PubSub_Socket_Render=/tmp/launch-jiNTOC/Render
    BASH=/bin/bash
    BASH_ARGC=()
    BASH_ARGV=()
    BASH_LINENO=()
    BASH_SOURCE=()
    BASH_VERSINFO=([0]="3" [1]="2" [2]="51" [3]="1" [4]="release" [5]="x86_64-apple-darwin13")
    BASH_VERSION='3.2.51(1)-release'
    COCOS2DROOT=/Users/andy/Source/cocos2d
    COLUMNS=80
    DIRSTACK=()
    ...
    

    (哦,顺便说一句,当您分配 A 但打印 $A 时,您的变量语法似乎不正确)

    【讨论】:

      【解决方案3】:

      如果变量被导出,那么你可以在 Unix 中使用env 命令。

      【讨论】:

      • 仅当变量被导出时。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      相关资源
      最近更新 更多