변수 연결이 작동하지 않나요?

변수 연결이 작동하지 않나요?

나를 미치게 만드는 간단한 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'"

관련 정보