读取和$ 1获得的参数之间有什么区别

时间:2016-12-27 03:47:48

标签: linux bash macos

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

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

但是如果我用

替换read fileDirectory
fileDirectory=$1

有效。

那有什么区别?

2 个答案:

答案 0 :(得分:2)

$ 1是传递给bash脚本或脚本中的函数的第一个参数

例如:

  mybashfunction /dirtofind
如果你写的话,在函数内部

echo "$1"

应该打印:

/dirtofind

编辑1:

您必须将shebang放在文件的开头

~$ 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
:~$ 

在这里像魅力一样工作。放置shebang

#!/bin/bash 

编辑2

是的,你可以使用eval。你的脚本将是这样的:

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

答案 1 :(得分:1)

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

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

请注意,您应引用变量扩展以避免单词拆分和路径名扩展;在大多数情况下,这些都是不受欢迎的。