Câu hỏi gán biến với tùy chọn tìm kiếm [trùng lặp]


Câu hỏi này đã có câu trả lời ở đây:

shopt -s nullglob
shopt -s failglob
find . -maxdepth 1 -type f -name '*[0-9][0-9]o' -printf 'x' | wc -c

Tôi cần gán kết quả số của find lệnh cho một biến. Ví dụ:

a=find . -maxdepth 1 -type f -name '*[0-9][0-9]o' -printf 'x' | wc -c.

Làm thế nào tôi có thể gán một biến cho kết quả của find chức năng?


1
2017-10-19 07:44


gốc


Của bạn shopt lệnh không cần thiết ở đây vì bạn không sử dụng trình bao để lắp ráp danh sách tệp. (Đối số lệnh '*[0-9][0-9]o' tuân theo cùng quy tắc như một quả cầu vỏ, nhưng thực sự được xử lý nội bộ bởi find, biết cách xử lý các trận đấu trống). - steeldriver


Các câu trả lời:


Sử dụng $(...) cho rằng:

a=$(find . -maxdepth 1 -type f -name '*[0-9][0-9]o' -printf 'x' | wc -c) ; echo "$a"

Một tùy chọn khác là sử dụng backticks:

a=`find . -maxdepth 1 -type f -name '*[0-9][0-9]o' -printf 'x' | wc -c` ; echo "$a"

Lưu ý rằng nếu bạn sử dụng backticks lồng nhau, bạn sẽ cần phải thoát khỏi chúng với dấu gạch chéo ngược.

Dưới đây là thông tin thêm về thay thế lệnh: http://wiki.bash-hackers.org/syntax/expansion/cmdsubst


3
2017-10-19 07:47



a=$(find . -maxdepth 1 -type f -name '*[0-9][0-9]o' | wc -l) - A.B.
@ A.P. , @ A.B. lý do sử dụng -printf 'x' | wc -c để đếm tập tin là nó làm cho nó an toàn cho các trường hợp (hiếm - nhưng hợp pháp) của tên tập tin có chứa ký tự dòng mới - steeldriver
@ Tôi thấy đấy. Bạn đúng rồi. Ngoài ra, đếm byte với wc -c có vẻ nhanh hơn. Cảm ơn, đã cập nhật câu trả lời. - A.P.