Re: Has a Debian developer ever unintentionally wiped out user files like Apple?
Brian May <bam@debian.org> writes:
> >>>>> "Ralph" == Ralph Jennings <ralph@oro.net> writes:
>
> Ralph> Not true..., UNIX users do know about the trouble
> Ralph> associated with buggy programs not able to handle spaces in
> Ralph> filenames, and so they try to make their programs work
> Ralph> correctly.
>
> Part of the problem, IMHO, is how most shells parse spaces. Take
> for instances this code:
>
>
> FILE="A B"
> cat $FILE
>
> sh will process this in several steps (I am guessing at the details
> here, especially with the execlp call, but the concept should be
> correct):
>
> 0. "cat $FILE"
> 1. "cat A B" (substitute $FILE)
> 2. "cat","A","B" (split spaces)
Only if you allow word splitting in variables.
bash does per default, zsh doesn't. Both can do eigther with the right
flags.
> 3. execlp("cat","A","B",NULL) (execute)
>
> resulting in:
>
> scrooge:~# A="A B"
> scrooge:~# cat $A
> cat: A: No such file or directory
> cat: B: No such file or directory
>
>
> zsh, on the other hand, won't split the environment variable after it
> is substituted:
>
> 0. "cat $FILE"
> 2. "cat","$FILE" (split spaces)
> 1. "cat","A B" (substitute $FILE)
> 3. execlp("cat","A B",NULL) (execute)
>
> [501] [scrooge:bam] ~ >FILE="A B"
> [502] [scrooge:bam] ~ >cat $FILE
> cat: A B: No such file or directory
Which is much more sane in my view, which is why I use zsh. :)
> now of course, the obvious answer (as far as sh is concerned) is to
> quote the $FILE and have cat "$FILE". However, that could have
> undesirable side affects (as also mentioned in the ZSH documentation,
> I can't recall the details now). For instance, in ZSH you can do this:
>
> [525] [scrooge:bam] ~ >FILE=("A B" "B C")
> [526] [scrooge:bam] ~ >cat $FILE
> cat: A B: No such file or directory
> cat: B C: No such file or directory
>
> which AFAIK, simply is not possible in sh unless you use multiple
> variables.
bash can do that with arrays.
> For why this might be important, consider the special $* variable...
>
> Ralph> I am a UNIX person (administrator, programmer, etc...), and
> Ralph> I commonly use spaces in filenames. I make sure that all
> Ralph> of my programs can handle spaces correctly. And I file bug
> Ralph> reports on all programs I find that can't.
>
> I never use spaces, partly because I don't trust my computer to cope
> <grin>, and partly because it is harder to type the filenames in at
> the command prompt.
MfG
Goswin
Reply to: