|
From: | Dennis Williamson |
Subject: | Re: eval a=b\ c |
Date: | Mon, 25 May 2015 20:12:52 -0500 |
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' -DLOCALEDIR='/usr/local/bash/4.3.39/share/locale' -DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H -I. -I../bash-4.3 -I../bash-4.3/include -I../bash-4.3/lib -g -O2
uname output: Linux s6.millcomputing.com 2.6.32-504.16.2.el6.x86_64 #1 SMP Wed Apr 22 06:48:29 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Machine Type: x86_64-unknown-linux-gnu
Bash Version: 4.3
Patch Level: 39
Release Status: release
Description:
# Echo the arguments, then execute them as a command.
function echodo() {
if [[ -n $ZSH_VERSION ]] ; then
echo "[ ${(q)@} ]"
eval ${(q)@}
else
echo "[ $@ ]"
eval $@
fi
}
echodo echo b\ c
echodo a=b\ c
echo $a
The result in zsh is:
$ echodo echo b\ c
[ echo b\ c ]
b c
$ echodo a=b\ c
[ a=b\ c ]
$ echo $a
b c
$
Bash gets an error:
$ echodo echo b\ c
[ 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 with its (q) expansion flag.
Bash behaves differently in this case::
$ echodo export a=b\ c
[ export a=b c ]
$ echo $a
b
$
Repeat-By:
Fix:
[Prev in Thread] | Current Thread | [Next in Thread] |