On Fri, Nov 22, 2013 at 11:21 PM, Pierre Gaston <pierre.gas...@gmail.com> wrote: > > > > On Fri, Nov 22, 2013 at 8:53 PM, Eric Blake <ebl...@redhat.com> wrote: >> >> On 11/22/2013 10:36 AM, Aleksey Midenkov wrote: >> >> > But nevertheless, I still find my proposal usable (since word >> > splitting for vars is unlikely to be usable in scripts). >> >> Scripts use word splitting on variables ALL the time. For example, I >> bet you have (multiple copies of) a script named install-sh somewhere on >> your system. It frequently uses word split variables, such as these >> setup lines: >> >> rmprog=${RMPROG-rm} >> ... >> rmcmd="$rmprog -f" >> >> for use in constructs like this: >> $doit $rmcmd -f "$dst" 2>/dev/null || >> >> Disabling word splitting for an interactive shell is one thing (and in >> fact, zsh has done that in their default mode), but for scripting, you >> would break LOTS of existing scripts if you changed the default behavior >> of word splitting. >> >> -- >> Eric Blake eblake redhat com +1-919-301-3266 >> Libvirt virtualization library http://libvirt.org >> > well, he proposes an option to turn on these behavior, not to change the > default behaviour. > I reckon something like shopt -s autoquote_expansions could be useful
Exactly. I need this option only for my scripts, not for all scripts. shopt -s unsplit_vars will be shorter and more clear, IMHO. I would say, that this style generally is wrong: rmprog=${RMPROG-rm} rmcmd="$rmprog -f" Because it will fail for files with spaces. It is better (when don't worry about portability and backward compatibility like in autotools) to use array: rmcmd=("$rmprog" -f) and then: "${rmcmd[@])" But, these pesky double quotes we need to put everywhere because of word splitting.