O motivo pelo qual seu comando não funciona é porque a remoção de citações / a divisão de palavras não é aplicada recursivamente.
Então, "$old_dest"
é expandido para o argumento SINGLE a seguir:
--link-dest "/media/t/my external hdd/backup/old one"
Tudo isso é UM argumento, porque a variável estava entre aspas duplas. (E essas aspas duplas são removidas, mas as aspas duplas que resultaram da expansão , ou seja, faziam parte do valor da variável, não são removidas.)
Se você usou $old_dest
, você receberia vários argumentos, mas não da maneira que deseja. Você receberia os seguintes cinco argumentos:
--link-dest
"/media/t/my
external
hdd/backup/old
one"
Isso ocorre porque você obteria expansão de variável seguida de divisão de palavras, conforme abordado no manual. Você não obteria expansão de variáveis seguida de interpretação das aspas na variável. E as aspas não seriam removidas, então o argumento final seria os quatro caracteres: one"
.
O jeito certo de fazer isso, como coberto em outra resposta, é usar matrizes Bash.
Em uma nota separada, você pode gostar de como o Tcl lida com citações e divisão de palavras. Provavelmente é mais intuitivo, embora eu seja tão experiente com a divisão de palavras shell que tenho que pensar mais em Tcl do que em shell.