私を狂わせる単純な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'"