我有一个简单的 bash shell 脚本,它让我发疯。我想做的就是运行一个返回结果的命令,然后我将在另一个命令中使用该结果。第一个命令的结果返回硬盘驱动器上带有空格的位置。这就是我所拥有的...
# 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)")
使用$()
而不是``
(除非您使用的是不理解前者的非常旧的 shell)。结构的嵌套$()
更加容易。
答案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'"