Tepmnthar
Tepmnthar

Reputation: 557

What's the difference between the parameters got by read and $1

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

It shows "find: XXXX"(fileDirectory) no such file or directory

However if I replace read fileDirectory by

fileDirectory=$1

It works.

So what's the difference?

Upvotes: 2

Views: 458

Answers (2)

Leonardo Hermoso
Leonardo Hermoso

Reputation: 838

$1 is the first argument passed to bash script or to a function inside the script

for example:

  mybashfunction /dirtofind

inside the function if you write:

echo "$1"

It should print:

/dirtofind

Edit 1:

You must place the shebang in the beginning of you file

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

Works like charm here. Place the shebang

#!/bin/bash 

Edit 2

Yes you can use eval. Your script will be like this:

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

Upvotes: 2

heemayl
heemayl

Reputation: 42117

read reads data from STDIN (by default), not from positional parameters (arguments).

As you are passing the data as first argument ($1) to the script, read would not catch it; it would catch the input you are providing interactively.

Just to note, you should quote your variable expansions to avoid word splitting and pathname expansion; these are unwanted in most cases.

Upvotes: 1

Related Questions