concatenação variável não está funcionando?

2

Eu tenho um simples script de shell que está me deixando louco. Tudo que eu quero fazer é executar um comando que retorna um resultado que eu irei usar em outro comando. O resultado do primeiro comando retorna um local no meu disco rígido com espaços. Aqui está o que eu tenho ...

# 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'

Parece que quando eu tento acrescentar as aspas simples ao redor do $ VMname, ele só é acrescentado à esquerda, ou seja, apenas a aspas simples esquerda é acrescentada. Há algo de bobo que estou fazendo errado? Isso realmente está me deixando louco!

    
por BON 24.08.2011 / 11:15

3 respostas

3

Tudo que você precisa é:

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

Se você não precisa da variável intermediária VMname , você também pode usar:

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

Use $() em vez de '' (a menos que você esteja usando uma shell muito antiga que não entende a primeira). O aninhamento de $() construções é mais fácil.

    
por 24.08.2011 / 14:41
2

Use apenas a cotação correta e a segurança de string.

Você pode simplificar um pouco e reforçar a citação ao não executar variáveis:

# 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")"
    
por 24.08.2011 / 14:02
0

Oh garoto. Por que não apenas escrever isso?

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

    
por 24.08.2011 / 11:46