bashshellscriptingshopt

Does ash have an equivalent to bash's 'nullglob' option?


If a glob pattern doesn't match any files, bash will just return the literal pattern:

bash-4.1# echo nonexistent-file-*
nonexistent-file-*
bash-4.1#

You can modify the default behavior by setting the nullglob shell option so if nothing matches, you get a null string:

bash-4.1# shopt -s nullglob
bash-4.1# echo nonexistent-file-*

bash-4.1# 

So is there an equivalent option in ash?

bash-4.1# ash
~ # echo nonexistent-file-*
nonexistent-file-*
~ # shopt -s nullglob
ash: shopt: not found
~ # 

Solution

  • For shells without nullglob such as ash and dash:

    IFS="`printf '\n\t'`"   # Remove 'space', so filenames with spaces work well.
    
    # Correct glob use: always use "for" loop, prefix glob, check for existence:
    for file in ./* ; do        # Use "./*", NEVER bare "*"
        if [ -e "$file" ] ; then  # Make sure it isn't an empty match
            COMMAND ... "$file" ...
        fi
    done
    

    Source: Filenames and Pathnames in Shell: How to do it correctly (cached)