Tôi đang tùy chỉnh zsh của mình PROMPT
và gọi một hàm có thể có hoặc không echo
có chuỗi dựa trên trạng thái của biến môi trường:
function my_info {
[[ -n "$ENV_VAR"]] && echo "Some useful information\n"
}
local my_info='$(my_info)'
PROMPT="${my_info}My awesome prompt $>"
Tôi muốn thông tin kết thúc trên một dòng mới, để nếu nó được đặt, nó sẽ xuất hiện trên dòng riêng của nó:
Some useful information
My awesome prompt $>
Tuy nhiên, nếu nó không được đặt, tôi muốn lời nhắc nằm trên một dòng duy nhất, tránh một dòng trống gây ra bởi một dòng mới vô điều kiện trong lời nhắc của tôi:
PROMPT="${my_info} # <= Don't want that :)
My awesome prompt $>"
Hiện tại tôi làm việc xung quanh việc $(command substitution)
xóa dòng mới của mình bằng cách thêm nó vào một ký tự không in, vì vậy dòng mới không bị kéo dài nữa:
[[ -n "$ENV_VAR"]] && echo "Some useful information\n\r"
Đây rõ ràng là một hack. Có cách nào sạch để trả về một chuỗi kết thúc trên một dòng mới không?
Chỉnh sửa: Tôi hiểu nguyên nhân gây ra sự mất mát của dòng mới và lý do tại sao điều đó xảy ra , nhưng trong câu hỏi này tôi đặc biệt muốn biết cách ngăn chặn hành vi đó (và tôi không nghĩ cách giải quyết này áp dụng trong trường hợp của tôi, vì tôi tìm kiếm một dòng mới "có điều kiện").
Chỉnh sửa: Tôi đứng chính xác: cách giải quyết được tham chiếu thực sự có thể là một giải pháp khá hay (vì các chuỗi tiền tố trong so sánh là một mẫu phổ biến và hơi giống nhau), ngoại trừ tôi không thể làm cho nó hoạt động chính xác:
echo "Some useful information\n"x
[...]
PROMPT="${my_info%x}My awesome prompt $>"
không tước dấu vết x
cho tôi.
Chỉnh sửa: Điều chỉnh cách giải quyết được đề xuất cho sự kỳ lạ đó là mở rộng nhanh chóng, điều này hiệu quả với tôi:
function my_info {
[[ -n "$ENV_VAR"]] && echo "Some useful information\n"x
}
local my_info='${$(my_info)%x}'
PROMPT="$my_info My awesome prompt $>"
Bạn là thẩm phán nếu đây là một giải pháp tốt hơn so với giải pháp ban đầu. Đó là một chút rõ ràng hơn, tôi nghĩ, nhưng nó cũng cảm thấy ít đọc hơn.
echo
. Đó không phải là trường hợp cho câu hỏi này.