【问题标题】:Bash shell variable inside variables变量中的 Bash shell 变量
【发布时间】:2011-12-26 20:53:12
【问题描述】:

我很确定这可以做到,但我不太确定正确的语法是什么:

dev=$(someprog1 -flag -flag);
tpcli=$(someprog2 -flag);
if [[ $tpcli = $(someprog3 -flag $dev -flag | grep stuff | cut -c 25-55) ]]; then
blah;
blah;

基本上我想创建变量并将其添加到 IF 语句旁边的变量中。 任何帮助将不胜感激。

【问题讨论】:

    标签: bash shell variables if-statement


    【解决方案1】:

    这通常有效;例如试试

    P=$(echo $PATH)
    

    如果有疑问 - 使用 ${PATH} 大括号和/或转义的 "'s - 来控制带有空格或扩展的东西的单个参数;并将其空格视为参数之间的分隔符。(这是由如果我们假设我们没有文件名并且其中没有空格,那么您的示例中不需要的方式)。

    作为一个更大的例子 - 考虑:

      #!/bin/sh
      dev=$(echo /dev/null)
      if [ $(cat $dev | wc -l) = "0" ]; then
          echo Fine
        exit 0
      else
          echo Now that is a surprize
      fi
      exit 1
    

    运行时给我们的

      beeb-2:~ dirkx$ sh xx.sh
      Fine
    

    或更详细:

      beeb-2:~ dirkx$ sh -x xx.sh
      ++ echo /dev/null
      + dev=/dev/null
      ++ cat /dev/null
      ++ wc -l
      + '[' 0 = 0 ']'
      + echo Fine
      Fine
      + exit 0
    

    所以这应该可以帮助您找到问题。你确定没有空格或换位吗?

    【讨论】:

    • 嗯,这仍然不适合我。如果我有多个 IF ELSE 语句,每个语句中的 $dev 变量略有不同,我是否需要以不同的方式命名每个变量?或者我可以用相同的名字称呼他们吗?
    • 呃,不——他们在那里得到评估。请参阅围绕 "、{ 和 (.
    • 不,我仍然没有运气。它真的让我很困惑,当变量在 shell 中执行时它只显示:someprog3 -flag $dev -flag。您对我在这里可能错过的内容有什么建议吗?
    • 您必须使用 -x 标志运行 sh。因为这从示例和手册页中都不太有意义。更新了示例。但它必须在那里 - 你正在犯一些你没有在摘要中显示的范围/空间/换位错误。
    • 感谢您的帮助。我追溯了我的脚步,发现我在进行搜索和替换时无意中更改了我的 grep 范围。这只是一个较大脚本的片段,当我运行它时,它看起来好像没有调用变量。再次感谢您的宝贵时间。
    【解决方案2】:

    我不太确定你在问什么,但你所做的并没有错(除了我永远不会在 if 子句中包含子shell)。

    bos@bos:$ foo=42
    bos@bos:$ [ $foo = $(echo 42) ] && echo yes || echo no
    yes
    bos@bos:$ [ $foo = $(echo 242) ] && echo yes || echo no
    no
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-15
      • 1970-01-01
      • 2013-03-03
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多