OK, I can make it to work in bash if I say
echodo a=b\\ c
but then zsh tries to execute c. Can’t win.
The problem is: how do I write this function so that it can be invoked
identically in zsh and bash with identical results of setting a variable to a
value with a space in it?
On 2015-05-26,
of setting a variable to a
value with a space in it?
dualbus@hp ~ % for sh in bash zsh; do $sh -c 'echodo(){ echo $*; eval $@;
}; echodo a=b\\ c; echo $a'; done
a=b\ c
b c
a=b\ c
b c
--
Eduardo Bustamante
https://dualbus.me/
d...@yost.com writes:
eval$@
You are expanding a shell parameter unquoted. Never do that unless you
know what you are doing.
eval $@
Andreas.
--
Andreas Schwab, SUSE Labs, sch...@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7
And now for
On Mon, May 25, 2015 at 12:33:53PM -0700, d...@yost.com wrote:
# Echo the arguments, then execute them as a command.
I can't find a way to implement echodo in bash.
set -x
your code
set +x
Configuration Information [Automatically generated, do not change]:
Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64'
-DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-unknown-linux-gnu'
-DCONF_VENDOR='unknown'
on call, and the other is till there for eval.
[ echo b c ]
b c
$ echodo a=b\ c
[ a=b c ]
bash: c: command not found
$ echo $a
$
I can't find a way to implement echodo in bash. Apparently this is because bash
is unable to expand a variable with quoting intact, as zsh can do
On 25/05/15 20:33, d...@yost.com wrote:
if [[ -n $ZSH_VERSION ]] ; then
echo [ ${(q)@} ]
eval${(q)@}
else
echo [ $@ ]
eval$@
fi
I believe the bash equivalent here would be something along the lines of:
quoted=$(printf '%q ' $@)
quoted=${quoted% }
echo [
Dennis Williamson wrote:
I'm trying to put a command in a variable, but the complex cases always
fail! : http://mywiki.wooledge.org/BashFAQ/050
Eval command and security issues : http://mywiki.wooledge.org/BashFAQ/048
Dunno, but I see nothing on that page about using
printf -v %q or