将命令输出分配给变量会产生奇怪的结果

将命令输出分配给变量会产生奇怪的结果

我的脚本如下所示:

#!/bin/sh
PROJECT_DIR=$(cd -P -- "$(dirname -- "$0")" && pwd -P)

COMMANDS_CODE=$(php $PROJECT_DIR/bin/console generate:code)

echo $COMMANDS_CODE

输出已删除所有换行符(如果我直接调用脚本,则不会发生这种情况),并且在开头包含一些奇怪的路径,如下所示:

/bin /boot /cdrom /dev /etc /home 
/initrd.img /lib /lib64 /lost+found 
/media /mnt /opt /proc /root /sbin 
/selinux /srv /sys /tmp /usr /var /vmlinuz 
... here starts the actual output but without any newlines ...

(上面实际上是一个长字符串,它是回显的,我只是添加了一些换行符以提高可读性)

那里发生了什么事?

如果我做一个

php bin/console generate:code

在我的 bash shell 的项目目录中,一切正常。

答案1

尝试将变量用双引号引起来。例子:echo "$COMMANDS_CODE"

您可以了解有关 shell 变量和引号的更多信息这里,在“引号的重要性”部分下。

相关内容