واقعاً عجیبه چون نسخه ی بش من هم دقیقاً همون نسخه هستش.
در یکی از وبسایت ها نوشته بود که در فایل bash_completion، عبارت (1) باید با (2) جایگزین بشه اما در پرانتز گفته بود که انجام این کار پیشنهاد نمی شه:
(1) [[ ${!2} == \$* ]] && eval $2=${!2}
(2) [[ ${!2} == \$\'* ]] && eval $2=${!2}
نظر شما چیه؟
(نشانی وبسایت: https://unix.stackexchange.com/questions/164231/how-to-fix-corrupted-bash-completion-in-command-substitution)
والا مشکل شما با اون فرق داره مشکل شما توی این بلوک هستش :
#!/bin/bash
_upvar()
{
if unset -v "$1"; then # Unset & validate varname
if (( $# == 2 )); then
eval $1=\"\$2\" # Return single value
else
eval $1=\(\"\${@:2}\"\) # Return array
fi
fi
}
که وقتی با source تست کردین خطا دادش ولی توی این قسمت ما چیزی به شکل [[ ${!2} == \$* ]] && eval $2=${!2} نداریم.
علاوه بر این الان من با اون فایل هیچ مشکلی ندارم و دقیقاً با همون خطوط هیچ خطایی دریافت نمی کنم و راحت source می گیرم.
با توجه به اینکه نسخه ی bash ما هم با هم دیگه یکی هستش تنها موردی که به ذهنم می رسه env ها هستش. شاید چیزی ست شده که باعث این مشکل می شه.
به عنوان تیر آخر خروجی این دستور رو هم بذارین:
env