EDITAR
O usuário alterou extensivamente sua pergunta, essa resposta foi uma edição do código que o usuário postou e que não existe mais em sua pergunta agora.
Existe um novo código e a questão mudou para outra coisa.
Como tal, esta resposta deve ser considerada como código antigo (e inválido).
Original
Se eu estou entendendo seu código corretamente.
Você está usando o eval apenas para obter o valor de dois vars dentro do seu código.
Isso é visto como "má prática".
Se você alterar seu arquivo de origem de:
LINK=(SRC=/.hd/home/younes/.conky DST=/home/younes/.conky)
para
/.hd/home/younes/.conky /home/younes/.conky
ou mesmo se você inserir o par de valores em um documento aqui, esse código fará a mesma coisa sem eval:
while read SRC DST
do
[[ ! -e $SRC ]] && [[ ! -e $DST ]] && echo "oOpsS! $DST" && exit
[[ ! -e $SRC ]] && mv "$DST" "$SRC"
[[ ! -e $DST ]] && $LINKIT "$SRC" "$DST"
ls -l "$DST" | grep "$SRC" &>/dev/null || $LINKIT "$SRC" "$DST"
done <<\_list_of_dir_pairs_
/.hd/home/younes/.conky /home/younes/.conky
/.hd/home/younes/.fonts /home/younes/.fonts
/.hd/home/younes/.thumbnails /home/younes/.thumbnails
/.hd/home/younes/.xbindkeys /home/younes/.xbindkeys
/.hd/home/younes/.xbindkeys_config /home/younes/.xbindkeys_config
/.hd/home/younes/.xbindkeysrc /home/younes/.xbindkeysrc
_list_of_dir_pairs_
E, se você precisar da matriz LINK, faça:
LINK=($SCR $DST)
Note que eu citei as expansões var de SRC e DST em mv e LINKIT, e mudei LINKIT para $ LINKIT (estou assumindo que é uma variável, e não uma função. Troque de volta se você precisar).