2012-03-29 85 views
0

Unix命令找不到我想做的事。 这里的情况是如何使用unix find命令的path参数变量?

如果键入: find ../tmp -name "\*tmp\*"

它正确地输出包含 “TMP” 在企业名称中TMP文件夹

的文件,但是当我输入:

dir=../tmp #assign ../tmp as a variable named dir 

find ${dir} -name "\*tmp\*" 

输出说:没有这样的文件或目录

我的猜测是查找逗号nd假定变量“dir”作为要查找的文件? 我该如何解决这个问题? 我想知道这个的原因是,我可以通过路径作为我的脚本的参数。 感谢

-----------附加注释

我使用的bash shell。 对不起,我感到困惑。上面的代码有效。真正的问题是当我在变量中加入{}结构时。例如, 当我键入

DIR = ../{TMP1,TMP3} #assign ../{tmp1,tmp3}为一个名为DIR

找到$ {DIR} -name“* TMP变量*“

输出说:没有这样的文件或目录 为什么?

+0

你发布的*应该*的工作。你能给出一个更确切的你输入的命令列表和确切的结果吗?你在使用哪种外壳? – FatalError 2012-03-29 19:09:28

+1

你输入的内容适合我。无论您使用变量extent'$ {dir}'还是字符串'../ tmp',您都应该得到完全相同的输出。你确定在调用这两个命令的方式和方式上没有什么不同吗?两种情况下你的当前工作目录是否相同? – Celada 2012-03-29 19:12:52

+1

你用什么外壳? TCSH?庆典? KSH?可能是bash,但请具体说明。不同的shell有不同的分配变量的方法。 – ghoti 2012-03-29 19:36:10

回答

2

命令行进行评估命令明智的,然后再采取任何行动(比如设置环境变量,调用programms的)完成。因此$ dir不是在命令行被评估之前设置的。解决该问题的一种可能性是通过;

dir=../tmp ; find "$dir" -name "tmp" 

从其使用的变量设置分离或写的命令分成两个独立的线(瑟尔瓦卢万尔的回答)。

dir=../tmp 
find "$dir" -name "tmp" 
1

这样做:

(在命令行)

# dir="../tmp/whatever/your/directory" 
# find $dir -name "*tmp*"