如何将一个Bash命令的输出分配给一个variables?

我有一个问题,把pwd命令的内容放入一个稍后我将使用的shellvariables中。

这是我的shell代码(循环不停止):

 #!/bin/bash pwd= `pwd` until [ $pwd = "/" ] do echo $pwd ls && cd .. && ls $pwd= `pwd` done 

你能发现我的错误吗?

尝试:

 pwd=`pwd` 

要么

 pwd=$(pwd) 

注意等号后面没有空格。

正如魏斯先生所指出的那样, 你不分配给$pwd ,你分配给pwd

在shell中,你赋值给一个没有美元符号的variables:

 TEST=`pwd` echo $TEST 

这是更好的(可以嵌套),但不像背后的便携式:

 TEST=$(pwd) echo $TEST 

永远记住:只有在读取variables时才使用美元符号。

在这个特定的情况下,请注意bash有一个名为PWD的variables,其中包含当前目录: $PWD等同于`pwd` 。 (所以其他的shell,这是一个标准的function 。)所以你可以写你的脚本是这样的:

 #!/bin/bash until [ "$PWD" = "/" ]; do echo "$PWD" ls && cd .. && ls done 

注意在variables引用周围使用双引号。 如果variables(这里是当前目录)包含空格或通配符( \[?* )),那么它们是必需的,因为shell将variables扩展的结果拆分为单词并对这些单词执行匹配。 总是双引号variables扩展"$foo"和命令replace"$(foo)" (除非你明确知道你没有)。

在一般情况下,其他答案已经提到:

  • 您不能在赋值中的等号周围使用空格: var=value ,而不是var = value
  • $表示“取这个variables的值”,所以在赋值时不要使用它: var=value ,而不是$var=value

你也可以做更复杂的命令,只是为了完成上面的例子。 所以说,我想获得系统上运行的进程数量,并将其存储在$ {NUM_PROCS}variables中。

所有你必须这样做的是生成命令pipe道,并将其输出(进程数)到variables中。

它看起来像这样:

 NUM_PROCS=$(ps -e | sed 1d | wc -l) 

我希望有助于为这个讨论添加一些方便的信息。

这是你的脚本…

 DIR=$(pwd) echo $DIR while [ "$DIR" != "/" ]; do cd .. DIR=$(pwd) echo $DIR done 

请注意空格,使用引号和$符号。