모든 로드 평균을 수집하여 배열에 넣으려고 합니다. 정확한 방법은 무엇이어야 하며, 다음 요구 사항을 염두에 두십시오.
배열을 정의합니다.
LA= ("one" "five" "fifteen")
LA= (`(uptime | grep -o '[0-9]\+\.[0-9]\+*')`)
그러나 uptime | grep -o '[0-9]\+\.[0-9]\+*'
명령은 다음과 같은 출력을 제공합니다.
3.08
3.49
3.61
요구 사항: 1. 평균이 공백으로 구분되고 배열 구문에 맞도록 개행 문자가 없어야 합니다.
소수점 이전의 값만 출력 또는 배열 변수로 전송됩니다.
답변1
배열을 채울 때 줄 바꿈은 문제가 되지 않습니다. bash
이 문맥에서는 또 다른 단어 구분 기호일 뿐입니다 .
명령에 두 가지 오류가 있습니다 LA= ((uptime | grep -o '[0-9]\+\.[0-9]\+*'))
.
뒤에 공간이 있습니다
=
. 이는 유효한 구문이지만 예상한 효과는 없습니다.줄의 나머지 부분에 값을 할당하는 대신
$LA
값을$LA
빈 문자열로 설정한 다음 줄의 나머지 부분을 실행합니다.이것은 유용한 기능입니다일시적으로내보낸 값 재정의환경특정 명령을 실행하기 전의 변수입니다. 명령이 종료되면 변수의 원래 값이 복원됩니다. 예를 들어
$ VISUAL=/usr/bin/joe sensible-editor myfile.txt .... (exit joe) $ echo $VISUAL /usr/bin/vi
$
두 번째 앞에 a 가 누락되어 있습니다(
. 아니요$
, 귀하의 주문은 그렇지 않습니다명령 대체, 이는 가짜 피연산자와 연산자를 사용한 쉘 산술입니다.
이 시도:
$ LA=($(uptime | grep -Eo '[0-9]+\.[0-9]+'))
$ typeset -p LA
declare -a LA=([0]="0.97" [1]="1.23" [2]="1.39")