Cách gán giá trị cho nhiều biến trong dòng lệnh bằng các thanh


9

Về cơ bản, tôi đang cố gắng xác nhận một số phần nhất định của đầu ra của lệnh shell để biến các biến số, nhưng tôi không biết làm thế nào để làm điều đó.

Để đơn giản, giả sử rằng lệnh trên shell, khi thực thi, in

one two three four

có thể được mô phỏng với một

echo "one two three four"

(mặc dù tỷ lệ thực tế là khác nhau)

Bây giờ, tôi muốn gán từ thứ hai và thứ tư của đầu ra (trong trường hợp này là haibốn ) cho các biến w1w2 .

Tôi nghĩ rằng tôi có thể sử dụng lệnh đọc như vậy:

echo "one two three four" | awk '{print $2 " " $4}' | read w1 w2

nhưng điều này không hoạt động, có thể là do lệnh đọc được thực thi trong một quy trình phụ.

Vì vậy, làm thế nào tôi sẽ đi để đạt được những gì tôi đang có sau?


Câu trả lời:


16

Điều này không hoạt động vì các readhoạt động trong một quy trình con không thể ảnh hưởng đến môi trường của cha mẹ.

Bạn có một vài lựa chọn:

Bạn có thể chuyển đổi lệnh của mình thành:

w1=$(echo "one two three four" | awk '{print $2}')
w2=$(echo "one two three four" | awk '{print $4}')

Ngoài ra, thay đổi IFS và sử dụng set:

OIFS="$IFS"
IFS=' '
set -- $(echo "one two three four" | awk '{print $2" "$4}')
IFS="$OIFS"
w1=$1 w2=$2

hoặc một chuỗi ở đây:

read w1 w2 w3 w4 <<< "one two three four"

4
Dựa trên Chuỗi ở đây: đọc a1 a2 a3 <<< $ (lặp lại một hai ba)
Petr Uzel

Cảm ơn rất nhiều. Tôi không biết về<<< Here String
René Nyffalanger

1
Để an toàn, bạn nên sử dụng read -r::do not allow backslashes to escape any characters
Tom Hale
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.