Dấu gạch chéo kép có nghĩa gì trong `$ {f // / _}`?


17

Tôi đang học Bash và tôi muốn thay thế các ký tự không gian bằng các ký tự "không trống" khác. Tôi đang sử dụng một forvòng lặp:

for f in *\ *; do mv "$f" "${f// /_}"; done

Câu hỏi của tôi là, tại sao dấu gạch chéo kép và khoảng trống trong ${f// /_}? Không gì ${f// /_}làm gì?


3
Nếu bạn không cần phải học nó bằng trái tim, ít nhất bạn nên biết nơi để đọc về nó: đó là trong hướng dẫn sử dụng bash .
glenn jackman

Câu trả lời:


19

Đó là một mô hình thay thế bằng cách sử dụng bashmở rộng tham số.

Trong ${f// /_}:

  • Dấu gạch chéo kép //là để thay thế tất cả các lần xuất hiện của không gian bằng _, nếu bạn đặt một dấu gạch chéo /, chỉ có khoảng trống đầu tiên sẽ được thay thế

  • Không gian ở đó vì bạn đang thay thế không gian (với dấu gạch dưới)

Vì vậy, mô hình cơ bản là:

${parameter//find/replace}

Kiểm tra man bashđể có thêm ý tưởng.

Để đến Parameter Expansionphần man bashcùng một lúc:

LESS=+/'Parameter Expansion' man bash

2
Trong ngắn hạn, nó là một tìm kiếm toàn cầu và thay thế.
glenn jackman

3

Phần này "{f// /_}có nghĩa là thay thế mọi không gian bằng và gạch dưới. Đây là sử dụng mở rộng tham số Bash, biến fđược xác định trong for f in *\ *;sẽ được chạy qua cho mọi trận đấu mở rộng shell (globalbing). Mỗi lần tên tệp tìm thấy sẽ trở thành giá trị $f.

Việc mở rộng tham số hoạt động với //ý nghĩa mỗi lần xuất hiện của ký tự //(khoảng trắng trong ví dụ này), nên được thay thế bằng ký tự sau /(gạch dưới trong ví dụ này).

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.