A questão é como @mikeserv apontou, as citações. Excesso de cotações. A solução é não ter aspas no seu foo em primeiro lugar:
estrutura dir (e temos cd para o d dir):
~
└── a
└── b c
└── d
Dentro de d dir, já temos foo e bar você postou. Mas agora crie:
foo2 :
echo $PWD
bar2 :
set -x
ls "$(./foo2)"
- temos
set -xpara que você possa ver claramente o que está acontecendo
Quando você executa o /bar no prompt de comando, você vê:
$ ./bar2
+++ ./foo2
++ ls '/home/youruser/a/b c/d'
bar bar2 foo foo2
Basta remover o set -x do código para obter a saída desejada com êxito:
bar bar2 foo foo2
Explicação
Se você adicionar set -x ao seu bar original e executar, verá
$ ./bar
+++ ./foo
++ ls '"/home/youruser/a/b c/d"'
ls: cannot access "/home/youruser/a/b c/d": No such file or directory
Isso é o mesmo que no prompt de comando que você executou:
$ ls '"/home/youruser/a/b c/d"'
ls: cannot access "/home/youruser/a/b c/d": No such file or directory
- O culpado é o extra
"quote - , que foi introduzido no seu original
foo - assim que
"for removido,lsfuncionará
Assim, remover as citações no seu foo original, como fizemos com foo2 , garante que ls o receba corretamente sem aspas excessivas e, em seguida, funciona.