เมื่อฉันecho $something >> file.txt
บรรทัดใหม่จะถูกผนวกเข้ากับไฟล์
ถ้าฉันต้องการผนวกโดยไม่มีบรรทัดใหม่
เมื่อฉันecho $something >> file.txt
บรรทัดใหม่จะถูกผนวกเข้ากับไฟล์
ถ้าฉันต้องการผนวกโดยไม่มีบรรทัดใหม่
คำตอบ:
นั่นคือสิ่งที่echo -n
มีไว้เพื่อ
cat
หรือไม่? (เช่นเมื่อคุณมีไฟล์something.txt
มากกว่าตัวแปร$something
)
printf
echo
เป็นอย่างมากที่มีความยืดหยุ่นและพกพามากขึ้นกว่า เช่นเดียวกับการประยุกต์ใช้ C / Perl / etc หากคุณไม่เลิกใช้สตริงรูปแบบด้วย\n
จะไม่มีการพิมพ์บรรทัดใหม่:
printf "%s" "$something" >> file.txt
หากคุณกำลังใช้เอาต์พุตของคำสั่งคุณสามารถใช้ xargs ร่วมกับ echo
/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts
tr
เป็นอีกทางเลือก
หากคุณใช้echo
เป็นอินพุตของคุณคุณสามารถหลีกเลี่ยงtr -d '\n'
ได้
เทคนิคนี้ยังใช้งานได้เมื่อทำการไพพ์ในเอาต์พุตจากคำสั่งอื่น ๆ (โดยมีเพียงเอาต์พุตบรรทัดเดียว) นอกจากนี้ถ้าคุณไม่ทราบว่าไฟล์ที่ได้ UNIX หรือ DOS tr -d '\n\r'
ตอนจบบรรทัดคุณสามารถใช้
นี่คือการทดสอบบางอย่างที่แสดงว่าทำงานได้
ขึ้นบรรทัดใหม่:
something='0123456789' ; echo ${something} | wc -c
11
บรรทัดใหม่ UNIX:
something='0123456789' ; echo ${something} | tr -d '\n\r' | wc -c
10
สไตล์ DOS:
something='0123456789' ; echo ${something} | unix2dos | tr -d '\n\r' | wc -c
10
ทดสอบกับ BSD tr
และ tr
GNU
echo $something
ให้ดีพฤติกรรมของมันขึ้นอยู่กับIFS
ตัวแปรและคุณสามารถจบลงด้วยตัวละครที่หายไป คุณสามารถลองต่อไปนี้:var="hello world"; echo $var
(สองช่องว่างระหว่างสวัสดีและโลก) หรือหรือvar="hello world"; IFS='l'; echo $var
var="-e hello \\n world"; echo $var
เพื่อแก้ปัญหานั้นก็ให้ใส่เครื่องหมายคำพูดคู่รอบตัวแปรเช่นนี้: หรือการใช้งานecho "$var"
printf