기본적으로 다음과 같은 시나리오가 있습니다.
grep 'test: \K(\d+)' $file
=> 15grep 'test1: \K(\d+)' $file
=> 20
예를 들어 쉼표를 구분 기호로 사용하여 두 명령의 결과를 변수에 저장하는 방법이 있습니까?
Test="grep 'test: \K(\d+)' $file;grep 'test1: \K(\d+)' $file"
대답 =eval $Test
예상 출력: 15,20
?
답변1
예, 다음을 사용하여 그렇게 할 수 있습니다.명령 대체:
Test="$(grep 'test: \K(\d+)' $file),$(grep 'test1: \K(\d+)' $file)"
변수 = $(..)
호출됨명령 대체이것이 의미하는 바는 쉘 명령을 실행하고 그 출력을 변수에 저장하거나 echo
명령을 사용하여 다시 표시하는 것입니다. 예를 들어 날짜와 시간을 표시하려면 다음을 수행하세요.
echo "Today is $(date)"
변수에 저장합니다.
SERVERNAME="$(hostname)"
출력에 연결할 수 있습니다.
echo "$(hostname),$(date)"
결과는 다음과 같습니다:
yourhostname,Tue Jan 24 09:56:32 EET 2017
답변2
명령의 출력을 변수에 넣으려면 다음을 사용하십시오.명령 대체, 이것이 바로 그것이 사용되는 것입니다. 사용해도 eval
도움이 되지 않습니다(올바르게 사용해도 이당신은 그렇지 않다).
Test="$(grep 'test: \K(\d+)' "$file"; grep 'test1: \K(\d+)' "$file")"
출력은 개행으로 구분된 두 개의 숫자입니다(각 패턴이 정확히 한 번 일치한다고 가정). 줄 바꿈으로 구분되는 이유는 grep이 다른 도구와 마찬가지로 줄을 출력하고 줄이 항상 줄 바꿈으로 끝나기 때문입니다. 첫 번째는 grep
끝에 개행을 인쇄하고, 두 번째는 끝에 개행을 인쇄한 다음, 바꾸기 명령은 끝에 있는 개행을 제거합니다. 쉼표를 구분 기호로 사용하려면 두 명령 대체를 두 명령 사이에 쉼표로 사용하세요.15
grep
20
Test="$(grep 'test: \K(\d+)' "$file"),$(grep 'test1: \K(\d+)' "$file")"