How to assign to a bash variable the first result of locate?

1.6k views Asked by At

I can allocate a path to a certain variable from bash:

VAR1=/home/alvas/something

I can find it automatically:

$ cd
$ locate -b "something" .
/home/alvas/something
/home/alvas/someotherpath/something

But how do I assign the first result from locate as a variable's value?

I tried the following but it doesn't work:

alvas@ubi:~$ locate -b 'mosesdecoder' . | VAR1=
alvas@ubi:~$ VAR1
VAR1: command not found
2

There are 2 answers

0
fejese On BEST ANSWER

You need to assign the output of the locate command to the variable:

VAR1=$(locate -b 'mosesdecoder' . | head -n 1)

(Use head to get the top n lines).

The construct $(...) is called command substitution and you can read about it in the Command Substitution section of the Bash Reference Manual or of the POSIX Shell Specification.

1
gniourf_gniourf On

read, redirections and process substitutions are your friends:

IFS= read -r var1 < <(locate -b 'mosesdecoder' .)

And using lowercase variable names is considered good practice.

It would also be better to use the -0 flag, if your locate supports it:

IFS= read -r -d '' var1 < <(locate -0 -b 'mosesdecoder' .)

just in case you have newlines or funny symbols in your paths.