Câu trả lời:
Đó là những gì echo -n
dành cho.
cat
? (ví dụ: khi bạn có tệp something.txt
chứ không phải biến $something
)
printf
là 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 \n
thì 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 echo
là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 tr
và GNU tr
.
echo $something
, hành vi của nó phụ thuộc vàoIFS
biế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 $var
hoặ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
.