[arch-general] bash - pathname expansion controls 'set -f' or 'set -o noglob' on broken?

mike rosset schizoid29 at gmail.com
Fri Aug 13 02:15:55 EDT 2010


On Thu, Aug 12, 2010 at 11:06 PM, David C. Rankin
<drankinatty at suddenlinkmail.com> wrote:
> Guys,
>
>        I'm either misunderstanding how to control expansion of wildcards on
> the command line when passing the parameter containing the wildcard as a cli
> option to a script or the bash controls to allow that are broken. I want to
> set up a little script alias to search /var/abs for packages and I want the
> ability to pass either 'name' or 'name*' or '*name*' as input, but if there
> is anything matching in the current directory, expansion happens before the
> cli is passed to the script.
>
>        Reading, I should be able to turn globbing off with either 'set -f'
> or 'set -o noglob' and then I should be able to pass the parameter contained
> a wildcard to the script without any pathname expansion. That appears broken
> -- or my logic is broken.
>
>        From man bash 'set -f' or 'set -o noglob on' should prevent
> expansion:
>
>  set [+abefhkmnptuvxBCEHPT] [+o option] [arg ...]
>  <snip>
>  -f      Disable pathname expansion.
>  <snip>
>  -o option-name
>        The option-name can be one of the following:
>  <snip>
>        noglob  Same as -f.
>
> EXAMPLE:
>
>  touch pacman-foo
>
> then use the following as your test script (tst.sh):
>
> #!/bin/bash
>
> myvar="$1"
>
> printf "Search:  %s\n" $myvar
>
> exit 0
>
>        Now since i have a file called pacman-foo in my directory trying to
> pass 'pacman*' should result in expansion before the cli is read resulting
> in:
>
> 00:42 nirvana:~/scr/arch/tmp> ./tst.sh pacman*
> Search:  pacman-foo
>
>        single-quoting doesn't even protect the cli?? :
>
> 00:42 nirvana:~/scr/arch/tmp> ./tst.sh 'pacman*'
> Search:  pacman-foo
>
>        Now try 'set -f' to disable pathname expanstion:
>
> 01:00 nirvana:~/scr/arch/tmp> set -f
> 01:02 nirvana:~/scr/arch/tmp> ./tst.sh pacman*
> Search:  pacman-foo
> 01:02 nirvana:~/scr/arch/tmp> ./tst.sh 'pacman*'
> Search:  pacman-foo
>
>        Huh? Now try 'set -o noglob'
>
> 01:02 nirvana:~/scr/arch/tmp> set -o noglob
> 01:03 nirvana:~/scr/arch/tmp> ./tst.sh pacman*
> Search:  pacman-foo
> 01:04 nirvana:~/scr/arch/tmp> ./tst.sh 'pacman*'
> Search:  pacman-foo
>
>        Huh? Again..  What gives is it bash or is it something I'm reading
> wrong?
>
>
>
> --
> David C. Rankin, J.D.,P.E.
> Rankin Law Firm, PLLC
> 510 Ochiltree Street
> Nacogdoches, Texas 75961
> Telephone: (936) 715-9333
> Facsimile: (936) 715-9339
> www.rankinlawfirm.com
>

quote command arguments like you would normally do.

ie. $ myscript "*pacman*"


More information about the arch-general mailing list