Câu trả lời:
Đó là những gì echo -ndành cho.
cat? (ví dụ: khi bạn có tệp something.txtchứ không phải biến $something)
printflà rất linh hoạt và di động hơn echo. Giống như các triển khai C / Perl / etc, nếu bạn không chấm dứt chuỗi định dạng \nthì không có dòng mới nào được in:
printf "%s" "$something" >> file.txt
Nếu bạn đang sử dụng đầu ra của lệnh, bạn có thể sử dụng xargs kết hợp với echo
/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts
tr là một lựa chọn khác.
Nếu bạn đang sử dụng echolàm đầu vào của bạn, bạn có thể lấy đi cái nào tr -d '\n'.
Kỹ thuật này cũng hoạt động khi đường ống đầu ra từ các lệnh khác (chỉ có một dòng đầu ra duy nhất). Hơn nữa, nếu bạn không biết liệu các tệp có kết thúc dòng UNIX hay DOS bạn có thể sử dụng hay không tr -d '\n\r'.
Dưới đây là một số thử nghiệm cho thấy rằng điều này hoạt động.
Dòng mới bao gồm:
something='0123456789' ; echo ${something} | wc -c
11
Dòng mới UNIX:
something='0123456789' ; echo ${something} | tr -d '\n\r' | wc -c
10
Phong cách DOS:
something='0123456789' ; echo ${something} | unix2dos | tr -d '\n\r' | wc -c
10
Đã thử nghiệm với BSD trvà GNU tr.
echo $something, hành vi của nó phụ thuộc vàoIFSbiến số, và bạn có thể kết thúc với nhân vật biến mất. Bạn có thể thử các cách sau:var="hello world"; echo $var(hai khoảng trắng giữa hello và world) hoặcvar="hello world"; IFS='l'; echo $varhoặcvar="-e hello \\n world"; echo $var. Để giải quyết điều đó, hãy đặt dấu ngoặc kép xung quanh biến như thế này :echo "$var", hoặc sử dụngprintf.