본질적으로 쉘 명령 출력의 특정 부분을 여러 변수에 할당하려고 하는데 어떻게 해야 할지 모르겠습니다.
단순화를 위해 쉘의 명령이 실행될 때 인쇄된다고 가정합니다.
one two three four
시뮬레이션을 사용할 수 있습니다.
echo "one two three four"
(실제 명령어는 다르지만)
이제 출력의 두 번째와 네 번째 단어를 할당하고 싶습니다(이 경우둘그리고4개)를 변수로w1그리고w2.
사용할 수 있을 것 같아요읽다다음과 같이 명령하세요:
echo "one two three four" | awk '{print $2 " " $4}' | read w1 w2
하지만 이것은 작동하지 않습니다. 아마도읽다명령은 하위 프로세스에서 실행됩니다.
그렇다면 내가 원하는 것을 어떻게 달성할 수 있을까요?
답변1
이는 read
하위 프로세스에서 실행되고 상위 프로세스의 환경에 영향을 줄 수 없기 때문에 작동하지 않습니다.
여러 가지 옵션이 있습니다:
명령을 다음으로 변환할 수 있습니다.
w1=$(echo "one two three four" | awk '{print $2}')
w2=$(echo "one two three four" | awk '{print $4}')
또는 IFS를 변경하고 다음을 사용하십시오 set
.
OIFS="$IFS"
IFS=' '
set -- $(echo "one two three four" | awk '{print $2" "$4}')
IFS="$OIFS"
w1=$1 w2=$2
또는 문자열은 다음과 같습니다.
read w1 w2 w3 w4 <<< "one two three four"
답변2
이 예에서는 Password.txt 파일에서 비밀번호 1과 2를 가져옵니다.
비밀번호.txt
비밀번호1:비밀번호2:비밀번호3:listjnAKcxu7tyLa7DJa:nn53tSnuJJxmYbEN:97m8crLrF3ap9y9R:비밀번호 목록
제니: 37 존: 40
read pass1 pass2 <<< $(awk -F: '/listpassword/{ print $1,$2; }' password.txt)