Question: Given the following files

```sh
$ ls
bar.txt  baz.txt  qux.txt

```

I would like to save only the first `txt` file to a variable. I tried this

```
$ var=*.txt

```

but it just saves all files

```
$ echo $var
bar.txt baz.txt qux.txt

```

I would like to do this using a wildcard if possible, and `extglob` is okay. The files here do not have spaces in the name but I would like the solution to also work for files with spaces.

After using [kamituel’s answer](https://stackoverflow.com/a/15827364) I realized that this can work too

```sh
$ set *.txt

$ echo $1
bar.txt

```

Answer: 
Use this:

```
$ var=(*.txt)
$ echo $var
bar.txt

```

Key here is to use parentheses - putting elements into array. So `echo $var` prints the first element from the array (`bar.txt`). You can see that by printing the whole array:

```
$ echo ${var[@]}
bar.txt baz.txt qux.txt

```
```
$ touch "test file1.txt"
$ touch "test file2.txt"
$ var=`ls *.txt | head -1`
$ echo $var
test file1.txt`

```

This will return the first file.

To find the last one, either do "ls -r" instead of "ls" or "tail -1" instead of "head -1".