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

下面是我的shell代码(循环不会停止):

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

你能指出我的错误吗?


当前回答

您还可以执行更复杂的命令,只是为了完善上面的示例。因此,假设我想获取系统上运行的进程数,并将其存储在${NUM_PROCS}变量中。

您所要做的就是生成命令管道,并将其输出(进程计数)填充到变量中。

它看起来是这样的:

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

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

其他回答

这是你的剧本……

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

注意空格、引号和$符号的使用。

在shell中,你赋值给一个不带$符号的变量:

TEST=`pwd`
echo $TEST

这更好(并且可以嵌套),但不像backtics那样可移植:

TEST=$(pwd)
echo $TEST

永远记住:$符号只在读取变量时使用。

您还可以执行更复杂的命令,只是为了完善上面的示例。因此,假设我想获取系统上运行的进程数,并将其存储在${NUM_PROCS}变量中。

您所要做的就是生成命令管道,并将其输出(进程计数)填充到变量中。

它看起来是这样的:

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

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

在这个特定的例子中,请注意bash有一个名为PWD的变量,它包含当前目录:$PWD相当于' PWD '。(其他shell也是如此,这是一个标准特性。)所以你可以这样写你的脚本:

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

注意在变量引用周围使用双引号。如果变量(这里是当前目录)包含空格或通配符(\[?*),它们是必需的,因为shell将变量展开的结果分割为单词,并对这些单词执行通配符。总是双引号变量展开“$foo”和命令替换“$(foo)”(除非你明确知道你不能这么做)。

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

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

Try:

pwd=`pwd`

or

pwd=$(pwd)

注意等号后面没有空格。

Weiss先生还指出;不是赋值给$pwd,而是赋值给pwd。