ممنون
ظاهرا فقط با eval می شه یک کدی رو نوشت که توی بش و zsh یکسان اجرا بشه.
خواهش می کنم.
بله البته بستگی به کدی هم داره که می خواید بزنید ؛ در کل راه زیاده مثلاً شما می تونین اسکریپتتون روی طوری بنویسین که اول شل رو چک کنه و اگه zsh بودش setopt shwordsplit رو به اجرا در بیاره.
if [[ -n $(readlink "/proc/$$/exe" | grep 'zsh') ]]; then
setopt shwordsplit
fi
function f() { echo $#; }
x="1 2"
f $x
پ.ن : در عبارت بالا استفاده از $SHELL به جای /proc/$$/exe درست نیست، چون $SHELL تنها environment variable مربوط به SHELL رو نیشون می ده نه شلی که با اون اسکریپت اجرا می شه.
ولی می تونین از دستوری مثل دستور زیر هم به جای /proc/$$/exe استفاده کنین :
if [[ $(ps -p $$ -ocomm=) = "zsh" ]]; then