Bash thêm dấu cách để chứng minh chuỗi


20

Mã hiện tại của tôi trông như thế này : x=${y:0:40}, giới hạn độ dài của chuỗi là 40 ký tự. Trong trường hợp chuỗi ngắn hơn 40 ký tự, có thể điền vào các vị trí dấu bằng dấu cách không?

Vì vậy, nếu của tôi y="very short text"

Tôi muốn y của tôi là:

y = "văn bản rất ngắn (+25 dấu cách) "

Câu trả lời:


19

Nếu các ký tự đó đều là byte đơn, đó là nếu bạn đang ở một địa điểm nơi bộ ký tự là byte đơn (như iso8859-1) hoặc nếu bộ ký tự của miền địa phương là UTF-8 nhưng văn bản chỉ là ASCII, bạn có thể làm :

printf -v y %-40.40s "$y"

Điều đó sẽ bao gồm cả cắt ngắn và đệm.

Nếu không, bạn luôn có thể thêm 40 khoảng trắng và sử dụng ${y:0:40}phương pháp của bạn .

printf -v pad %40s
y=$y$pad
y=${y:0:40}

zsh có các toán tử chuyên dụng cho phần đệm bên trái và bên phải:

y=${(r:40:)y}

(cũng không cắt ngắn). zsh's printfđếm bằng ký tự thay vì byte, vì vậy sẽ không có bash' vấn đề s trên. Tuy nhiên lưu ý rằng bạn cần zsh5.3 hoặc mới hơn cho -vtùy chọn.

Xem thêm câu trả lời này cho một câu hỏi liên quan để biết thêm chi tiết nếu bạn phải đối mặt với các nhân vật không có cùng chiều rộng.


14

Bạn nên thử printf:

printf '%-40s' "$y"

10

Tinh khiết bash:

ten="          " 
forty="$ten$ten$ten$ten" 
y="very short text"
y="${y:0:40}${forty:0:$((40 - ${#y}))}"
echo "'${y}'"

Phương pháp là thêm 0-40 khoảng trắng vào mỗi chuỗi sau khi cắt nó.

Đầu ra, (lưu ý các vị trí trích dẫn duy nhất):

'very short text                         '

1
Tôi thà sử dụng phương pháp này, bởi vì nó sẽ hoạt động trực tiếp trên các biến và không cần xuất ra.
David Tabernero M.
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.