変数の接続は機能しませんか?

変数の接続は機能しませんか?

私を狂わせる単純なbashシェルスクリプトがあります。私が望むのは、他のコマンドで使用する結果を返すコマンドを実行することです。最初のコマンドの結果は、空白を含むハードドライブの場所を返します。これが私が持っているものです...

# Get list of virtual machines.  VMname will hold the address of the .vmx file
VMname=`./vmrun list`
echo $VMname

# Get list of snapshots
command="./vmrun listSnapshots "
command=$command"'"
command=$command$VMname
command=$command"'"
echo $command
snapshotList=`$command`

$VMname の周囲に一重引用符を追加しようとすると、左側にのみ追加されるようです。つまり、左側の単一引用符のみを追加します。私は何か愚かなことをしましたか?本当にクレイジーになりますね!

答え1

必要なものは次のとおりです。

VMname=$(./vmrun list)
snapshotList=$(./vmrun listSnapshots "$VMname")

中間変数が不要な場合は、次のものもVMname使用できます。

snapshotList=$(./vmrun listSnapshots "$(./vmrun list)")

$()代わりに使用してください``(電子を理解していない非常に古いシェルを使用しない限り)。構造のネストが$()簡単になりました。

答え2

適切な引用と文字列の安全性を使用してください。

変数を適用しないことで、これを少し単純化し、参照をサポートすることもできます。

# Get list of virtual machines.  VMname will hold the address of the .vmx file
VMname="$(./vmrun list)"
echo "$VMname"

# Get list of snapshots
echo "./vmrun listSnapshots '$VMname'"
snapshotList="$(./vmrun listsnapshots "$VMName")"

答え3

良い人。これだけ書けばどうでしょうか?

command="./vmrun listSnapshots '$VMname'"

関連情報