cut 문에서 공백 구분 기호가 있는 단어 문자열 생성

cut 문에서 공백 구분 기호가 있는 단어 문자열 생성

나는 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' ' '`

참고: 어떤 사람들은 $()역따옴표 대신 구문을 사용하는 것을 선호하지만 둘 다 유용하며 선택이 있을 때는 역따옴표를 사용합니다. 두 가지를 모두 갖는 실제 이점은 백틱 표현식이 먼저 하위 셸로 전송된 다음 해당 $()부분이 실행되므로 두 수준에서 실행을 처리하려는 경우입니다.

관련 정보