変数にコマンド出力を割り当てると、奇妙な結果になります。

変数にコマンド出力を割り当てると、奇妙な結果になります。

私のスクリプトは次のとおりです

#!/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シェルのプロジェクトディレクトリでは、すべてがうまくいきます。

ベストアンサー1

変数を二重引用符で囲みます。例:echo "$COMMANDS_CODE"

シェル変数と引用符の詳細をご覧ください。ここ、「引用の重要性」セクションの下にあります。

おすすめ記事