O caractere &
em $varj
tem um significado especial na parte de substituição de um comando s/search/replace/
. Isso significa "insira o texto correspondente aqui".
Você pode usar \&
para "escapar" de &
, para que não tenha um significado especial. Você pode usar sed para modificar $varj
para substituir todos os &
chars por \&
:
varj=$(echo "$varj" | sed -e 's/\&/\\&/g')
Por exemplo:
cas@ganesh:/tmp$ ksh
$ vari='111|abc & efg|123'
$ varj='222|abc & efg|123'
$ echo "$vari" | sed -e "s/$vari/$varj/g"
222|abc 111|abc & efg|123 efg|123
$ varj=$(echo "$varj" | sed -e 's/\&/\\&/g')
$ echo "$varj"
222|abc \& efg|123
$ echo "$vari" | sed -e "s/$vari/$varj/g"
222|abc & efg|123