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

C Anthony Risinger anthony at extof.me
Fri Aug 13 03:27:15 EDT 2010


On Fri, Aug 13, 2010 at 2:10 AM, mike rosset <schizoid29 at gmail.com> wrote:
> Dave you need to quote your variables ie.
>
> var="*pacman*"; echo "$var"
>
> so  printf "Search:  %s\n" $myvar should read
>
> printf "Search:  %s\n" "$myvar"
>
> On Thu, Aug 12, 2010 at 11:39 PM, David C. Rankin
> <drankinatty at suddenlinkmail.com> wrote:
>> On 08/13/2010 01:32 AM, David C. Rankin wrote:
>>>
>>> On 08/13/2010 01:15 AM, mike rosset wrote:
>>>>
>>>> quote command arguments like you would normally do.
>>>>
>>>> ie. $ myscript "*pacman*"
>>>
>>> Nope:
>>>
>>> 01:32 nirvana:~/scr/arch/tmp> ./tst.sh "pacman*"
>>> Search: pacman-foo
>>>
>>>
>>
>> Mike,
>>
>>        I'm sorry, that was a short answer. My thoughts in this situation
>> were that partial or soft-quoting "" would not offer any additional
>> protection that full or hard-quoting '' did not already provide. From ABS:
>>
>>    partial quoting [double quote]. "STRING" preserves (from interpretation)
>> most of the special characters within STRING.
>>
>>    full quoting [single quote]. 'STRING' preserves all special characters
>> within STRING. This is a stronger form of quoting than "STRING".
>>
>>        I'd run across this a couple of days ago on the pacman -Ss reformat
>> script work.

yes what mike said is correct.  the best way to remember/catch stuff
like this, is to always remember that bash variables are almost pure,
direct "text-replacement"; by this i mean the contents of the variable
are substituted in place of the variable, and _then_ the expression is
evaluated.  so, in your case, this line:

printf "Search:  %s\n" $myvar

expanded/substituted as:

printf "Search:  %s\n" pacman*

which expanded yet again by bash to:

printf "Search:  %s\n" pacman-foo

before finally being passed to printf().

C Anthony


More information about the arch-general mailing list