Não há divisão de palavras (como no recurso que divide variáveis em expansões não citadas) nesse código, pois $myvarnão é entre aspas.
Existe, no entanto, uma vulnerabilidade de injeção de comando, que $myvaré expandida antes de ser passada para bash. Portanto, seu conteúdo é interpretado como código bash!
Os espaços lá farão com que vários argumentos sejam transmitidos cd, não por causa da divisão de palavras , mas porque eles serão analisados como vários tokens na sintaxe do shell. Com um valor de bye;reboot, isso será reiniciado! ¹
Aqui, você deseja:
sudo bash -c 'cd -P -- "$1"' bash "$myvar"
(onde você passa o conteúdo $myvarcomo o primeiro argumento desse script embutido; observe como $myvare $1foram citados para o respectivo shell para impedir a divisão de palavras IFS (e globbing)).
Ou:
sudo MYVAR="$myvar" bash -c 'cd -P -- "$MYVAR"'
(onde você passa o conteúdo $myvarem uma variável de ambiente).
Obviamente, você não conseguirá nada útil executando apenas cd esse script embutido (além de verificar se rootpode cdentrar nele). Presumivelmente, você deseja que esse script chegue cdlá e faça outra coisa como:
sudo bash -c 'cd -P -- "$1" && do-something' bash "$myvar"
Se a intenção era usar sudopara poder cdentrar em um diretório ao qual você não tem acesso, isso não pode realmente funcionar.
sudo sh -c 'cd -P -- "$1" && exec bash' sh "$myvar"
iniciará um interativo bashcom seu diretório atual em $myvar. Mas esse shell estará rodando como root.
Você poderia fazer:
sudo sh -c 'cd -P -- "$1" && exec sudo -u "$SUDO_USER" bash' sh "$myvar"
Para obter uma interatividade sem privilégios bashcom o diretório atual $myvar, mas se você não tiver as permissões para cdentrar nesse diretório em primeiro lugar, não poderá fazer nada nesse diretório, mesmo que seja seu diretório de trabalho atual.
$ myvar=/var/spool/cron/crontabs
$ sudo sh -c 'cd -P -- "$1" && exec sudo -u "$SUDO_USER" bash' sh "$myvar"
bash-4.4$ ls
ls: cannot open directory '.': Permission denied
Uma exceção seria se você tiver permissão de pesquisa para o próprio diretório, mas não para um dos componentes do diretório de seu caminho:
$ myvar=1/2
$ mkdir -p "$myvar"
$ chmod 0 1
$ cd 1/2
cd: permission denied: 1/2
$ sudo sh -c 'cd -P -- "$1" && exec sudo -u "$SUDO_USER" bash' sh "$myvar"
bash-4.4$ pwd
/home/stephane/1/2
bash-4.4$ mkdir 3
bash-4.4$ ls
3
bash-4.4$ cd "$PWD"
bash: cd: /home/stephane/1/2: Permission denied
¹ estritamente falando, para valores $myvariguais $(seq 10)(literalmente), haveria divisão de palavras, é claro, após a expansão dessa substituição de comando pelo bash shell, iniciada comoroot
cdúnico tem efeito dentro dobash -cshell.