Suppose I have a directory under which there are 3 files named: file1.txt,file2.txt and file3.txt.
Now how can I fill an array with those file names(I just know that all the files have certain prefix, i.e. file, after file it can be 1,2,3 etc.
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.Sign up to join this community
From Greg's Wiki: the Bash Guide entry on arrays:
files=() while read -r -d $'\0'; do files+=("$REPLY") done < <(find *.txt -print0)
There is a detailed explanation of arrays on the page that breaks this construct down element by element; it is well worth reading in full.
If the files are all in the same directory, you have some other options in addition to jasonwryan's answer.
Using a glob:
Only matching the example files in the question:
If you have bash version 4 or higher, you can even glob recursively:
shopt -s globstar files=(**/file[0-9].txt)
Using brace expansion to restrict your array to only your example files:
Unlike the other two examples, this will populate the array with the filenames, even if they do not exist. For this reason, the brace expansion may not be desirable.