Tôi đang cố gắng in -n
bằng echo
lệnh. Nhưng nếu tôi chỉ đơn giản gõ echo -n
, nó chỉ phát hành một dòng mới, không hiển thị -n
, thay vào đó nó phát hành một dòng mới.
getopt
(???) để phân tích dòng lệnh
Tôi đang cố gắng in -n
bằng echo
lệnh. Nhưng nếu tôi chỉ đơn giản gõ echo -n
, nó chỉ phát hành một dòng mới, không hiển thị -n
, thay vào đó nó phát hành một dòng mới.
getopt
(???) để phân tích dòng lệnh
Câu trả lời:
Vấn đề là echo
giải thích -n
như là một đối số. Trên triển khai bash mặc định, điều đó có nghĩa là (từ help echo
):
-n do not append a newline
Có nhiều cách khác nhau để giải quyết vấn đề đó:
Biến nó thành một thứ không phải là một lựa chọn bằng cách bao gồm một nhân vật khác. Ví dụ, yêu cầu echo
không in một dòng mới với -n
, sau đó yêu cầu nó giải thích các dấu gạch chéo ngược -e
và thêm dòng mới một cách rõ ràng.
$ echo -ne '-n\n'
-n
Ngoài ra, chỉ bao gồm một không gian
$ echo " -n"
-n
Điều đó, tuy nhiên, thêm một không gian mà bạn có thể không muốn.
Sử dụng một ký tự không in trước nó. Đây. Tôi đang sử dụng backspace ( \b
)
$ echo -e "\b-n"
-n
Điều này cũng thêm một nhân vật mà bạn có thể không muốn.
Sử dụng mánh khóe
$ echo n- | rev
-n
Các rev
lệnh đơn giản in sản lượng của nó bị đảo ngược.
Sử dụng công cụ phù hợp cho công việc
$ printf -- '-n\n'
-n
grep '^-n'
. pritnf
là con đường để đi, thực sự.
printf
dù sao cũng tốt hơn, nhưng câu hỏi liên quan đến chỉ echo
.
echo -e "-n\c"
làm điều chính xác.
\c
đang ngăn chặn sản lượng tiếp theo
Đôi khi, nên sử dụng đúng công cụ. Bạn có thể sử dụng printf
thay thế:
% printf "-n\n"
-n
echo
, trong khi printf
được tiêu chuẩn hóa tốt hơn .
Bạn có thể sử dụng lệnh này, nhưng nó thêm một không gian bổ sung.
echo -e "\r-n"
Đây là một loại hack.
-e
cho phép ký hiệu dấu gạch chéo ngược.
\r
là một sự trở lại xe ngựa.
Trên thực tế, bất kỳ \
ký tự hợp lệ sẽ làm ở bất kỳ vị trí nào của chuỗi.
Bạn có thể thấy cái nào hợp lệ bởi help echo
.
echo "-n"
không hoạt động vì -n
được sử dụng làm tham số cho echo
.
PS Giải pháp tốt nhất IMHO là
echo -e "-n\c"
Nó không thêm bất kỳ ký tự nào .
echo -e "-n\n"
in giống nhau nhưng với một dòng char mới.
-n
là hợp lệ, -nfoo
không phải như vậy sẽ được in.
man echo
cũng có nó. Nhưng help
tốt hơn một chút.
/bin/echo
là một điều hoàn toàn khác và khi bạn chạy echo
trong bash, bạn sẽ nhận được nội dung có thể khá khác nhau tùy thuộc vào vỏ của bạn.
Tôi nghĩ rằng nếu bạn chắc chắn chỉ muốn sử dụng echo
, điều này sẽ làm bạn hài lòng:
echo "-n "
Điều này hoạt động bởi vì while -n
là một tùy chọn hợp lệ cho echo
, -n
với một khoảng trắng sau nó thì không. Vì nó không phải là một lựa chọn, echo
chỉ cần in nó.
Các bạn đang thực sự lật đổ nó.
echo -e \\055n
Hoặc không có dòng mới
echo -en \\055n
printf "-n\n"
một suy nghĩ quá mức?
/bin/echo
ít nhất là nếu được gọi làecho -e "\055n"
Để mở rộng câu trả lời của @ AB, cách duy nhất để sử dụng echo
là không sử dụng bất kỳ tùy chọn nào như -n
. Cân nhắc sử dụng printf
thay vì nơi có sẵn. Trang tham khảo này cung cấp thêm chi tiết và giải thích rất rõ khi nào echo
và printf
nên sử dụng như thế nào :
Ngày nay, echo (1) chỉ có thể mang theo nếu bạn bỏ qua các cờ và thoát các chuỗi. Sử dụng printf (1) thay vào đó, nếu bạn cần nhiều hơn văn bản thuần túy.
Trong tập lệnh Bash, bạn có thể chạy:
echo -n -
echo n
Hoặc trong vỏ tương tác:
echo -n - ; echo n
Đây echo
là một -
nhân vật và một n
nhân vật.
-pilot6@Pilot6:~$
. Các đầu ra thứ hai n
.
&&
- tôi thực sự sẽ không nói câu trả lời này là sai .
Bạn có thể chạy
printf -n;echo
Đã thử nghiệm trong Busybox Ash
ash
là tên của Shell Almquist.
echo -n -- -n
hoạt động không (không có hộp linux nào tiện để kiểm tra)?