막대 차트를 사용하여 명령줄에서 여러 변수에 값을 할당하는 방법

막대 차트를 사용하여 명령줄에서 여러 변수에 값을 할당하는 방법

본질적으로 쉘 명령 출력의 특정 부분을 여러 변수에 할당하려고 하는데 어떻게 해야 할지 모르겠습니다.

단순화를 위해 쉘의 명령이 실행될 때 인쇄된다고 가정합니다.

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)

관련 정보