我有一个问题,把pwd
命令的内容放到一个我稍后会用到的shell变量中。如何将Bash命令的输出分配给变量?
这里是我的shell代码(循环不停止):
#!/bin/bash
pwd= `pwd`
until [ $pwd = "/" ]
do
echo $pwd
ls && cd .. && ls
$pwd= `pwd`
done
你能发现我的错吗?
我有一个问题,把pwd
命令的内容放到一个我稍后会用到的shell变量中。如何将Bash命令的输出分配给变量?
这里是我的shell代码(循环不停止):
#!/bin/bash
pwd= `pwd`
until [ $pwd = "/" ]
do
echo $pwd
ls && cd .. && ls
$pwd= `pwd`
done
你能发现我的错吗?
尝试:
pwd=`pwd`
或
pwd=$(pwd)
注意等号后没有空格签字。
也正如韦斯先生指出的那样;你不分配到$pwd
,你分配到pwd
。
太好了,非常感谢你:) 会明确的记得没有空格和$符号 – Zenet 2010-02-22 22:34:37
很好用,但'$(pwd)'中'$()'是什么意思? – 2015-09-07 07:04:50
@AwQiruiGuo在$ bash中的'$()'只是将自身替换为使用大括号执行的命令的输出;所以'$(pwd)'会扩展到'/ home/ubuntu',例如,使作业等同于:'pwd ='/ home/ubuntu'' – 2015-10-10 21:47:26
在外壳分配给一个变量不美元符号:
TEST=`pwd`
echo $TEST
那最好不过了(并且可以嵌套),但并不像backtics便携式:
TEST=$(pwd)
echo $TEST
一定要记住:美元符号仅在读取变量时使用。
记住为变量名使用小写:http://stackoverflow.com/questions/673055/correct-bash-and-shell-script-variable-大写 – Langston 2015-07-17 13:13:24
你也可以做更复杂的命令,以完成上面的例子。因此,假设我想获取系统上正在运行的进程数并将其存储在$ {NUM_PROCS}变量的中。
所有你必须这样做的是生成命令管道和它的输出(进程数)到变量中的东西。
它看起来是这样的:
NUM_PROCS=$(ps -e | sed 1d | wc -l)
我希望帮助增加一些方便的信息,这一讨论。
在这个特定情况下,请注意,bash有一个变量,名为PWD
,其中包含当前目录:$PWD
相当于`pwd`
。 (所以做其他炮弹,这是一个standard feature)。所以你可以写你的脚本是这样的:
#!/bin/bash
until [ "$PWD" = "/" ]; do
echo "$PWD"
ls && cd .. && ls
done
注意周围使用变量引用双引号的。如果变量(这里是当前目录)包含空格或通配符(\[?*
),则它们是必需的,因为shell将变量扩展的结果拆分为单词并对这些单词执行匹配。 总是双引号变量扩展"$foo"
和命令替换"$(foo)"
(除非你明确知道你有没有)。
在一般情况下,其他的答案已经提到:
var=value
,不
var = value
$
的意思是“取该变量的值“,因此在分配时不使用它:var=value
,而不是
$var=value
这里是你的脚本...
DIR=$(pwd)
echo $DIR
while [ "$DIR" != "/" ]; do
cd ..
DIR=$(pwd)
echo $DIR
done
注意空格,请使用引号,和$迹象。
请记住为变量名使用小写:http://stackoverflow.com/questions/673055/correct-bash-and-shell-script-variable-capitalization – Langston 2015-07-17 13:13:55
如果出现问题,您也可以在循环中添加一个逃生舱口。例如循环的“我= 0”。然后在里面,'我= $ i + 1'。然后在循环中添加'if if $ $> 25'之类的东西;打破; endif;'我不确定shell脚本中的语法循环是否中断,但它应该是这样的。 – 2013-04-18 03:55:03