awk "{ gsub( \\"$1\\", \\"$2\\" ); print }"
Do gsub() chcesz przekazać tekst, więc oba parametry tej funkcji muszą być w cudzysłowie.
A backslash \\ escapuje te cudzysłowy, ponieważ już jeden podwójny cudzysłów mamy otwarty na początku całego parametru dla awk.
Czyli po wydaniu polecenia:
$ ./test.sh 'cos tam' 'cos innego'
linia:
awk "{ gsub( \\"$1\\", \\"$2\\" ); print }"
wykona awk z pojedynczym parametrem równym:
{ gsub( "cos tam", "cos innego" ); print }
Czyli zostaną podstawione parametry $1 i $2 i wyescapowane znaki \\" do ".
Na marginesie: pojedynczego cudzysłowu
awk nie przyjmuje (wywala błąd składi):
awk "{ gsub( '$1', '$2' ); print }" // ŹLE!
.