2013-03-25 109 views
0

我是Linux shell脚本新手,我试图设置以下变量来获取从键盘传入的文件夹路径的大小。我不断收到错误,提示无效选项。 T设置变量Linux

谁能告诉我我做错了什么?当我删除“大小”变量并保持原样时,该错误消失。

谢谢!

#!/bin/bash 
echo -e "\nEnter the first directory (relative path)" 
read dir1 

size=find $dir1 -type f | wc -l 

echo $size 

回答

3

它应该是:

size=$(find $dir1 -type f | wc -l) 

使用$()符号意味着一个命令应该运行,并且其输出置于就行了。

这是因为变量被分配文字文本值。

myvar=foo 

将会把字符串“foo”到myvar而不是变量foo的值或foo的命令的结果。

myvar=$foo 

会把变量foo的价值为myvar。并且

myvar=$(foo) 

会将运行命令foo的结果放到myvar中。

有一个shell语法的特殊部分,它允许您在运行命令之前分配变量值,并且只为该命令设置这些变量值。它看起来像这样:

x=foo1 y=foo2 command parameter ... 

size=find $dir1 -type f | wc -l 

size分配的“查找”的值,你已经写的方式你的线,然后

$dir1 -type f # this won't be a valid command 

作为一个单独的命令被执行。

+0

工作。你能解释为什么吗?谢谢。将接受 – Teddy13 2013-03-25 05:46:05

+1

@ Teddy13:我已经添加了一些解释。 – 2013-03-25 06:17:50

+0

谢谢!非常清楚! – Teddy13 2013-03-25 06:57:42