ฉันกำลังเขียนสคริปต์ Bash ที่พิมพ์ข้อความไปที่หน้าจอ:
echo "Some Text"
ฉันสามารถจัดรูปแบบข้อความได้ไหม? ฉันต้องการทำให้เป็นตัวหนา
ฉันกำลังเขียนสคริปต์ Bash ที่พิมพ์ข้อความไปที่หน้าจอ:
echo "Some Text"
ฉันสามารถจัดรูปแบบข้อความได้ไหม? ฉันต้องการทำให้เป็นตัวหนา
คำตอบ:
วิธีที่เข้ากันได้มากที่สุดในการทำเช่นนี้คือใช้tput
เพื่อค้นหาลำดับที่ถูกต้องที่จะส่งไปยังเทอร์มินัล:
bold=$(tput bold)
normal=$(tput sgr0)
จากนั้นคุณสามารถใช้ตัวแปร$bold
และจัด$normal
รูปแบบสิ่งต่าง ๆ :
echo "this is ${bold}bold${normal} but this isn't"
จะช่วยให้
นี่เป็นตัวหนาแต่ไม่ใช่
tput smul
tput
เป็นคำสั่งที่ยอดเยี่ยมพร้อมคำสั่งมากมายสำหรับงานที่แตกต่างกันมากมาย
motd
ไฟล์ ฉันจะกำหนด$bold
และ$normal
ตัวแปรในที่ไหน
ในการใช้สไตล์กับสตริงของคุณคุณสามารถใช้คำสั่งเช่น:
echo -e '\033[1mYOUR_STRING\033[0m'
คำอธิบาย:
-e
ตัวเลือกหมายความว่าสตริงที่หลบหนี (แบ็กสแลช) จะถูกตีความจำนวนเต็มที่เป็นไปได้คือ:
[0m
ข้อเสนอและนี้จะอธิบายได้ดี
\033[0m
3
- ตัวเอียงอย่างน้อยที่สุดใน konsole
ฉันคิดว่า bash กำลังทำงานบนเทอร์มินัลที่รองรับ vt100 ซึ่งผู้ใช้ไม่ได้ปิดการสนับสนุนสำหรับการจัดรูปแบบอย่างชัดเจน
ขั้นแรกให้เปิดการรองรับอักขระพิเศษecho
โดยใช้-e
ตัวเลือก ต่อมาใช้ลำดับหลบหนีแบบ ansi ESC[1m
เช่น:
echo -e "\033[1mSome Text"
เพิ่มเติมเกี่ยวกับลำดับ escape ansi เช่นที่นี่: ascii-table.com/ansi-escape-sequences-vt-100.php
echo -e "\033[1mSome Text\033[0m"
มิฉะนั้นบรรทัดต่อไปนี้ของเทอร์มินัลของคุณก็จะเป็นตัวหนาเช่นกัน
\033
คุณสามารถใช้\e
เช่นecho -e "\e[1msome text\e[0m"
ในทางทฤษฎีเช่น:
# BOLD
$ echo -e "\033[1mThis is a BOLD line\033[0m"
This is a BOLD line
# Using tput
tput bold
echo "This" #BOLD
tput sgr0 #Reset text attributes to normal without clear.
echo "This" #NORMAL
# UNDERLINE
$ echo -e "\033[4mThis is a underlined line.\033[0m"
This is a underlined line.
แต่ในทางปฏิบัติอาจตีความได้ว่าเป็นสี "ความเข้มสูง" แทน
(ที่มา: http://unstableme.blogspot.com/2008/01/ansi-escape-sequences-for-writing-text.html )