什么是由读了这些参数之间的差异$ 1
问题描述:
echo -n "*.xcodeproj directory: ";
read fileDirectory;
echo -n $fileDirectory;
fileExtension="pbxproj";
find $fileDirectory -name "*.${fileExtension}";
它显示“找到:XXXX”(文件目录)没有这样的文件或目录
但是如果我通过
fileDirectory=$1
更换read fileDirectory
它作品。
那有什么区别?
答
$ 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}";
答
read
从STDIN(默认)读取数据,而不是从位置参数(参数)中读取数据。
当您将数据作为第一个参数($1
)传递给脚本时,read
不会捕获它;它会捕获您交互提供的输入。
要注意,你应该引用你的变量扩展,以避免分词和路径名扩展;这些在大多数情况下是不希望的。
+0
感谢您的笔记,但是当它们在打印后看起来都正确时,在'find'中使用它们有什么区别? – Tepmnthar
谢谢,但为什么我不能使用'find'中'read'所捕获的fileDirectory? – Tepmnthar
试试像这样找到“$ fileDirectory” –
我刚刚发现“〜”不能被解释为/ read /''参数中的/ Users/XXX。那么有什么方法可以纠正它,或者我需要手动替换“〜”? – Tepmnthar