变量串联不起作用?

变量串联不起作用?

我有一个简单的 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'"

相关内容