2016-12-27 80 views
2
echo -n "*.xcodeproj directory: "; 
read fileDirectory; 
echo -n $fileDirectory; 
fileExtension="pbxproj"; 
find $fileDirectory -name "*.${fileExtension}"; 

它显示“找到:XXXX”(文件目录)没有这样的文件或目录

但是如果我通过

fileDirectory=$1 

更换read fileDirectory它作品。

那有什么区别?

回答

2

$ 1传递给bash脚本或函数的脚本

例如里面的第一个参数:

mybashfunction /dirtofind 

里面的功能,如果你写:

echo "$1" 

它应该打印:

/dirtofind 

编辑1:

的你的文件

~$ cat a.sh 
#!/bin/bash 

echo -n "*.xcodeproj directory: "; 
read fileDirectory; 
echo -n $fileDirectory; 
fileExtension="pbxproj"; 
find "$fileDirectory" -name "*.${fileExtension}"; 

~$ chmod +x a.sh 
~$ ./a.sh 
*.xcodeproj directory: /home 
/home/home/leonardo/Qt/Tools/QtCreator/share/qtcreator/qbs/share/qbs/examples/cocoa-touch-application/CocoaTouchApplication.xcodeproj/project.pbxproj 
/home/leonardo/Qt/Tools/QtCreator/share/qtcreator/qbs/share/qbs/examples/cocoa-application/CocoaApplication.xcodeproj/project.pbxproj 
:~$ 

作品般的魅力在这里你必须把家当在一开始。放置家当

#!/bin/bash 

编辑2

是的,你可以使用eval。您的脚本将如下所示:

#!/bin/bash 
echo -n "*.xcodeproj directory: "; 
read fileDirectory; 
echo -n $fileDirectory; 
fileExtension="pbxproj"; 
eval fileDirectory=$fileDirectory 
find "$fileDirectory" -name "*.${fileExtension}"; 
+0

谢谢,但为什么我不能使用'find'中'read'所捕获的fileDirectory? – Tepmnthar

+0

试试像这样找到“$ fileDirectory” –

+0

我刚刚发现“〜”不能被解释为/ read /''参数中的/ Users/XXX。那么有什么方法可以纠正它,或者我需要手动替换“〜”? – Tepmnthar

1

read从STDIN(默认)读取数据,而不是从位置参数(参数)中读取数据。

当您将数据作为第一个参数($1)传递给脚本时,read不会捕获它;它会捕获您交互提供的输入。

要注意,你应该引用你的变量扩展,以避免分词和路径名扩展;这些在大多数情况下是不希望的。

+0

感谢您的笔记,但是当它们在打印后看起来都正确时,在'find'中使用它们有什么区别? – Tepmnthar

相关问题