What does "$1/*" mean in "for file in $1/*"

bash, linux, shell

Solution

It's the glob of the first argument considered as a directory

In bash scripts the arguments to a file are passed into the script as `$0` ( which is the script name ), then `$1`, `$2`, `$3` ... To access all of them you either use their label or you use one of the group constructs. For group constructs there are `$*` and `$@`. (`$*` considers all of the arguments as one block where as `$@` considers them delimited by `$IFS`)

Problem

The short bash script below list all files and dirs in given directory and its sub. What does the `$1/*` mean in the script? Please give me some references about it. Thanks ``` #!/bin/sh list_alldir(){ for file in $1/* do if [ -d $file ]; then echo $file list_alldir $file else echo $file fi done } if [ $# -gt 0 ]; then list_alldir "$1" else list_alldir "." fi ```

Original source