나는 문자열의 모든 단어를 변수에 사용하고 할당 sed
합니다 <<<
. read
내가 한 일은 다음과 같습니다.
read -a A0 <<< $(sed '2q;d' /proc/stat)
따라서 sed
파일의 두 번째 줄을 읽고 file
즉시 종료합니다. 읽은 행이 sed
입력되고 <<<
수신된 입력이 확장되며 sed
결과 read -a
값이 <<<
배열 요소에 할당됩니다. 이런 방식으로 <<<
and 를 사용하는 것이 sed
좋은 생각입니까, 아니면 반대하는 분명한 이유가 있습니까? 가장 중요한 것은 이 작업을 수행하는 더 빠른 방법이 있습니까?
답변1
배열 할당을 직접 사용할 수 있습니다.
A0=($(sed '2q;d' /proc/stat))
이는 와일드카드를 적용한다는 점에 유의하십시오. 명령 출력에 쉘 와일드카드가 포함된 경우 와일드카드가 포함된 단어는 일치하는 파일 목록(있는 경우)으로 대체됩니다. 명령 출력에 문자 중 하나가 포함될 수 있는 경우 \[?*
임시로 와일드카드를 끄십시오.
set -f
A0=($(sed '2q;d' /proc/stat))
set +f
이는 다음을 사용하는 것보다 약간 빠릅니다 read
.
$ time for i in {1..1000}; do read -a A0 <<< $(sed '2q;d' /proc/stat); done
real 0m2.829s
user 0m0.220s
sys 0m0.480s
$ time for i in {1..1000}; do A0=($(sed '2q;d' /proc/stat)); done
real 0m2.388s
user 0m0.128s
sys 0m0.276s
버전 4.0 이상의 경우 bash
다음을 사용할 수 있습니다 mapfile
.
mapfile -t < <(sed '2q;d' /proc/stat)
그러나 mapfile
가장 느린 것 같습니다.
$ time for i in {1..1000}; do mapfile -t < <(sed '2q;d' /proc/stat); done
real 0m3.990s
user 0m0.104s
sys 0m0.444s
답변2
제 생각에는 구문이 너무 복잡해 보입니다. 대신 다음을 사용합니다.
read -a A0 < <( sed '2q;d' /proc/stat )
<<< word
나는 보통 다른 명령이 아닌 변수로부터 입력을 얻기 위한 명령이 필요할 때 이 구문을 사용합니다.