Tôi đang cố gắng in -nbằng echolệ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 -nbằng echolệ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à echogiải thích -nnhư 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 echokhô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 -evà thêm dòng mới một cách rõ ràng.
$ echo -ne '-n\n'
-nNgoà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 revlệ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'
-ngrep '^-n'. pritnflà con đường để đi, thực sự.
printfdù 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 printfthay 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.
-nlà hợp lệ, -nfookhông phải như vậy sẽ được in.
man echocũng có nó. Nhưng helptốt hơn một chút.
/bin/echolà một điều hoàn toàn khác và khi bạn chạy echotrong 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 -nlà một tùy chọn hợp lệ cho echo, -nvớ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, echochỉ 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 echolà không sử dụng bất kỳ tùy chọn nào như -n. Cân nhắc sử dụng printfthay 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 echovà printfnê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 echolà một -nhân vật và một nnhâ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
ashlà tên của Shell Almquist.
echo -n -- -nhoạt động không (không có hộp linux nào tiện để kiểm tra)?