나는 bash를 처음 사용합니다. 다음 명령을 실행할 때:
grep "type" /root/myFile | cut-d'=' -f2
나는 다음을 얻습니다 :
102
304
503
442
변수의 내용이 다음과 같이 선언하는 것과 동일하도록 첫 번째 명령의 내용을 변수에 저장하고 싶습니다.
myVariable="102 304 503 442"
이 문제를 어떻게 해결해야 할지 모르겠습니다. 빈 문자열로 초기화 myVariable
하고 명령의 내용을 한 줄씩 순회한 다음 공백을 사이에 두고 myVariable에 추가합니까, 아니면 bash를 사용하여 이 작업을 수행하는 더 쉬운 방법이 있습니까?
답변1
bash
명령 대체와 매개변수 확장을 사용하여 자체적 으로 이를 수행할 수 있습니다 .
먼저 명령 대체를 사용하여 변수에서 명령의 출력을 가져온 $()
다음 매개변수 확장을 사용하여 모든 줄 바꿈을 공백으로 바꿉니다 ${variable//$'\n'/ }
.
$ myVariable=$(grep "type" /root/myFile | cut-d'=' -f2)
$ myVariable=${myVariable//$'\n'/ }
$ echo $myVariable
102 304 503 442
그러나 재사용성과 청결성을 위해서는 배열을 사용하는 것이 더 좋습니다.
myArray=( $(grep "type" /root/myFile | cut-d'=' -f2) )
일반적인 방식으로 배열 요소를 반복합니다.
답변2
myVariable=`grep "type" /root/myFile | cut-d'=' -f2`
백틱(`) 사이에 있는 내용이 실행되고 출력이 에 할당됩니다 myVariable
.
현재 출력이 줄 바꿈( )으로 구분된 경우 다음과 같은 \n
공백으로 바꿀 수 있습니다 .tr
myVariable=`grep "type" /root/myFile | cut-d'=' -f2`|tr '\n' ' '`
참고: 어떤 사람들은 $()
역따옴표 대신 구문을 사용하는 것을 선호하지만 둘 다 유용하며 선택이 있을 때는 역따옴표를 사용합니다. 두 가지를 모두 갖는 실제 이점은 백틱 표현식이 먼저 하위 셸로 전송된 다음 해당 $()
부분이 실행되므로 두 수준에서 실행을 처리하려는 경우입니다.