On Feb 19, 2005, at 23:15, Sune Foldager wrote:
I don't get it; this is expected behaviour, no?
Did you read Eric's post? Do you know how we can solve this problem w/o using xargs?
Oh.. we can't. The quotes are taken as part of the name, since bash doesn't do any further processing on expanded variables. Thus, unless fed to an argument splitter like xargs, quotes strings in variables are not very useful. An alternative *could* be to use bash array env-vars. I don't know how you can manipulate those though :-p.
Just found the “solution”, we can convert TM_SELECTED_FILES to an array using eval, example: eval FILES=($TM_SELECTED_FILES) for ((i=0; i < ${#FILES[@]}; i++)); do ls -l "${FILES[i]}" done
Or as required in the original example: eval FILES=($TM_SELECTED_FILES) diff -u "${FILES[0]}" "${FILES[1]}"
Though generally the xargs version is nicer, and also, it would work if the file names contained quotes, which the above doesn't take care of.
And should you want to use the above, you may want to set the input field separator (IFS) to just a space (by default it also contains tab and newline) -- not that I really expect anyone to find this useful, but at least it seems there is a solution which doesn't involve an argument splitter like xargs.