【问题标题】:How to get names of variables are available/set in shell scripts如何在 shell 脚本中获取/设置变量的名称
【发布时间】:2015-12-29 17:21:55
【问题描述】:

我想在 shell 脚本中设置所有变量名。我有一个包含键值对的文件,我从该文件中读取内容并将其存储/设置到变量中。如果变量可用/设置,我想做一些过程,否则我不需要做这些过程。如何实现这一点。

例如,我在每次迭代中在 shell 脚本中运行循环,它会在该命令之前设置一个变量。

如果是这样的代码

a=test1
b=test2
c=test3

for i in ???
do
    echo $i
done

那么我想要这样的输出

一个 b c

使用什么命令来实现这一点。

【问题讨论】:

  • 这样的事情可能会有所帮助:stackoverflow.com/questions/1305237/…
  • 不,数组不适合我的场景。
  • 找到它们的规则是什么?
  • 没有规则我想要所有变量名。
  • 运行declare -p,你应该得到它们。

标签: shell


【解决方案1】:

您可以在设置变量之前和之后使用set

例如:

$ set > aux1
$ c=345
$ set > aux2
$ diff aux1 aux2
57c57
< PIPESTATUS=([0]="141" [1]="0")
---
> PIPESTATUS=([0]="0")
112a113
> c=345

【讨论】:

    【解决方案2】:

    如果您有此类变量的预定义列表,那么您可以像这样对其进行测试:

    for i in $(echo "a b c"); do
        echo $i
    done
    

    【讨论】:

    • 我不知道变量名,因为它是从输入文件动态创建的。上面的代码是我想要的结果的示例。
    【解决方案3】:

    如果我能帮助你:

    #!/bin/sh
    
    #   Define list of tests
    LIST_TESTS=`cat list_test.txt`
    
    for TEST in ${LIST_TESTS}
    do
        vartest=`echo ${TEST}`
        if [  "${vartest}" = "" ]
        # No Test
          then
            echo "*** WARNING***  Test not found"   
        else
            echo "${vartest} is available"
        fi
    done
    
    #   Second Define list of tests
    tabTest=('test1' 'test2' 'test3')
    
    i=0
    while  [ "${tabTest[$i]}" != "" ]
    do
        echo "${tabTest[$i]} is available"
        i=$(($i+1))
    done
    

    【讨论】:

      猜你喜欢
      • 2017-09-24
      • 1970-01-01
      • 2020-05-07
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      • 2013-09-04
      相关资源
      最近更新 更多