我在将pwd
命令的内容放入shell变量时遇到问题,稍后我将使用它。
这是我的shell代码(循环不会停止):
#!/bin/bash
pwd= `pwd`
until [ $pwd = "/" ]
do
echo $pwd
ls && cd .. && ls
$pwd= `pwd`
done
你能发现我的错误吗?
答案 0 :(得分:259)
尝试:
pwd=`pwd`
或
pwd=$(pwd)
注意等号后面没有空格。
韦斯先生也指出了这一点;您未分配到$pwd
,而是指定给pwd
。
答案 1 :(得分:25)
在shell中,您分配给没有美元符号的变量:
TEST=`pwd`
echo $TEST
更好(并且可以嵌套),但不像背景那样可移植:
TEST=$(pwd)
echo $TEST
永远记住:美元符号仅在读取变量时使用。
答案 2 :(得分:16)
在这种特定情况下,请注意bash有一个名为PWD
的变量,其中包含当前目录:$PWD
等同于`pwd`
。 (所以其他shell也是standard feature。)所以你可以这样编写你的脚本:
#!/bin/bash
until [ "$PWD" = "/" ]; do
echo "$PWD"
ls && cd .. && ls
done
请注意在变量引用周围使用双引号。如果变量(这里是当前目录)包含空格或通配符(\[?*
),则它们是必需的,因为shell将变量扩展的结果拆分为单词并对这些单词执行通配。 始终双引号变量扩展"$foo"
和命令替换"$(foo)"
(除非您明确知道自己没有)。
在一般情况下,正如其他答案已经提到的那样:
var=value
,而不是var = value
$
表示“获取此变量的值”,因此在分配时不要使用它:var=value
,而不是$var=value
答案 3 :(得分:7)
你也可以做更复杂的命令,只是为了完善上面的例子。所以,假设我想获得系统上运行的进程数,并将其存储在 $ {NUM_PROCS} 变量中。
您只需要生成命令管道并将其输出(进程计数)填充到变量中。
它看起来像这样:
NUM_PROCS=$(ps -e | sed 1d | wc -l)
我希望这有助于为此次讨论添加一些方便的信息。
答案 4 :(得分:2)
这是你的剧本......
DIR=$(pwd)
echo $DIR
while [ "$DIR" != "/" ]; do
cd ..
DIR=$(pwd)
echo $DIR
done
请注意空格,引号的使用和$符号。