echo -n "*.xcodeproj directory: ";
read fileDirectory;
echo -n $fileDirectory;
fileExtension="pbxproj";
find $fileDirectory -name "*.${fileExtension}";
它显示“find:XXXX”(fileDirectory)没有这样的文件或目录
但是如果我用
替换read fileDirectory
fileDirectory=$1
有效。
那有什么区别?
答案 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
将无法捕获它;它会捕捉您以交互方式提供的输入。
请注意,您应引用变量扩展以避免单词拆分和路径名扩展;在大多数情况下,这些都是不受欢迎的。