เมื่อฉันecho $something >> file.txtบรรทัดใหม่จะถูกผนวกเข้ากับไฟล์
ถ้าฉันต้องการผนวกโดยไม่มีบรรทัดใหม่
เมื่อฉันecho $something >> file.txtบรรทัดใหม่จะถูกผนวกเข้ากับไฟล์
ถ้าฉันต้องการผนวกโดยไม่มีบรรทัดใหม่
คำตอบ:
นั่นคือสิ่งที่echo -nมีไว้เพื่อ
catหรือไม่? (เช่นเมื่อคุณมีไฟล์something.txtมากกว่าตัวแปร$something)
printfechoเป็นอย่างมากที่มีความยืดหยุ่นและพกพามากขึ้นกว่า เช่นเดียวกับการประยุกต์ใช้ 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และ trGNU
echo $somethingให้ดีพฤติกรรมของมันขึ้นอยู่กับIFSตัวแปรและคุณสามารถจบลงด้วยตัวละครที่หายไป คุณสามารถลองต่อไปนี้:var="hello world"; echo $var(สองช่องว่างระหว่างสวัสดีและโลก) หรือหรือvar="hello world"; IFS='l'; echo $varvar="-e hello \\n world"; echo $varเพื่อแก้ปัญหานั้นก็ให้ใส่เครื่องหมายคำพูดคู่รอบตัวแปรเช่นนี้: หรือการใช้งานecho "$var"printf