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