저는 배쉬를 처음 접했습니다. 다음 명령을 실행할 때:
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' ' '`
참고: 어떤 사람들은 $()
백틱 대신 구문을 사용하는 것을 선호하지만 둘 다 유용하며 선택이 있을 경우 백틱을 사용합니다. 두 가지를 모두 갖는 실제 이점은 백틱 표현식이 먼저 서브셸로 전송된 다음 $()
해당 부분이 실행되므로 두 수준에서 실행을 처리하려는 경우입니다 .