A sintaxe nos seus primeiros exemplos está incorreta. Se você escrever:
[[ -v $HOME ]]
Então você está realmente executando o comando:
[[ -v /home/yourusername ]]
Qual é claro que vai falhar. Você quer:
[[ -v HOME ]] && echo ok || echo no
Você pode combinar isso com su para obter:
su - root -c "[[ -v HOME ]]" && echo ok || echo no
Seus últimos exemplos não funcionarão porque você não pode aninhar aspas e porque a expansão da variável shell ocorre antes da execução do comando. Isto é, dado:
su - root -c "echo "$HOME" | wc | cut -d' ' -f2"
O comando que você executa realmente será:
su - root -c 'echo /home/somesuser | ...'
Se você quiser o valor de $HOME da perspectiva de root , precisará evitar a expansão de variáveis no shell local, por exemplo, usando aspas simples:
su - root -c 'echo $HOME | ...'
Não está claro para mim por que você está passando a saída para wc , porque a contagem de palavras de $HOME quase sempre será 1 . Em vez de pós-processar a saída de wc com sed ou cut , basta usar a opção -w para obter a contagem de palavras:
su - root -c 'echo $HOME | wc -w'