สัญลักษณ์เหล่านี้ในคำสั่งเทอร์มินัล Linux หมายถึงอะไร [ปิด]


12

บน AskUbuntu ฉันเห็นคำสั่งไม่กี่คำที่ดูค่อนข้างซับซ้อนมีสัญลักษณ์มากมายในนั้น เพื่อให้เข้าใจถึงวิธีการสร้างคำสั่งเหล่านี้ได้ดีขึ้นฉันต้องการทราบว่าสัญลักษณ์นี้มีไว้เพื่ออะไร

ตัวอย่างเช่น:

find ~/ -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;

หรือซับซ้อนยิ่งขึ้น:

echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m"

ผมเข้าใจดีว่าการเพิ่มพารามิเตอร์เป็น-c, --debugมีผลกระทบบางอย่างบน commmand หลัก ความหมายของสิ่งเหล่านี้ในเกือบทุกกรณีสามารถพบได้ในmanหน้าเว็บดังนั้นจึงไม่ใช่สิ่งที่ฉันกำลังมองหา

โปรดลองตอบคำถามของคุณเพื่อกำหนดสัญลักษณ์ที่เฉพาะเจาะจงแทนที่จะอธิบายตัวอย่างที่ฉันให้ ที่อาจมีลักษณะเช่นนี้:

" means 'argument': the main command uses anything within these symbols as its source
^ is used for ...
# is used for ...

ขอบคุณล่วงหน้า


ผมคิดว่าขึ้นอยู่กับคำสั่ง-c -Dอาจหมายถึงสิ่งที่อยู่ในคำสั่งที่ 1 และเป็นสิ่งที่แตกต่างกันอย่างสมบูรณ์ในคำสั่ง 2.
ยูริโน่

เฮ้คุณเปลี่ยนคำสั่งที่ 1 หรือไม่ ที่แก้ไข: X
Rinzwind

ฉันเปลี่ยนความคิดเห็นที่ 1 เพราะเป็นสิ่งที่ไม่ให้ข้อมูล ฉันต้องการแสดงตัวอย่างที่มีความเกี่ยวข้องมากที่สุด ฉันได้แก้ไขความคิดเห็นในส่วนที่เหมาะสมสำหรับเรื่องนั้น ขอบคุณสำหรับสิ่ง -c -D ฉันเข้าใจแล้ว ฉันอัพเดทคำถาม
Execution-G

คำตอบ:


14

ดูทุบตี Reference Manualส่วนที่เรียกว่าเชลล์การดำเนินงานและขั้นสูงทุบตี Scripting คู่มือ บทที่ 3 (อักขระพิเศษ)

ฉันอ้างถึงสิ่งเหล่านั้นเมื่อใดก็ตามที่ฉันต้องการเรียนรู้สิ่งใหม่เกี่ยวกับเชลล์สคริปต์ใน ubuntu / linux

ฉันคิดว่าคุณจะพบ ABS บทที่ 3 ง่ายที่สุดในการนำทางเพื่อจุดประสงค์ของคุณ สัญลักษณ์ทั้งหมดจะปรากฏที่ด้านซ้ายสุดของหน้าพร้อมคำอธิบายด้านล่างทันที


คู่มือ Bash-Scripting ขั้นสูง - บทที่ 3 นั้นยอดเยี่ยม ขอบคุณ
Execution-G

รายการในบทที่ 3 ของคู่มือการใช้สคริปต์การทุบตีขั้นสูงไม่สมบูรณ์และผิดบางส่วน คู่มือการเขียนสคริปต์ Bash ขั้นสูงไม่ใช่ทรัพยากรที่ดีสำหรับการเรียนรู้การทุบตี ดูmywiki.wooledge.org/BashGuideและmywiki.wooledge.org/BashFAQแทน
geirha

@geirha ฉันพบว่า ABS มีประโยชน์มาก แต่สำหรับสัญลักษณ์ในคำสั่งเฉพาะฉันชอบดู man pages แทนและลิงค์ของคุณก็ดีเช่นกัน - บุ๊กมาร์ก ขอบคุณ
SaultDon

7

น่าเสียดายที่คุณต้องไปที่หน้าคนเพราะ "สัญลักษณ์" อาจมีความหมายแตกต่างกันขึ้นอยู่กับคำสั่งที่อ่าน

ตัวอย่างเช่นในคำสั่งแรกของคุณความหมายของ {} และ \; ขึ้นอยู่กับคำสั่ง find (man find) ความหมายของเครื่องหมายคำพูดบนอาร์กิวเมนต์เพื่อ sed ขึ้นอยู่กับ sed หรือ bash (เนื่องจากเป็นพารามิเตอร์ที่อ้างถึงซึ่งอาจเป็นสิ่งที่เชลล์) The ~ / เป็นรูปแบบการขยาย bash แน่นอน

สำหรับคำสั่งที่ซับซ้อนลำดับที่สองมันเป็นเสียงสะท้อนส่วนใหญ่ดังนั้นคุณจะพบข้อมูลส่วนใหญ่ในหน้า man ของ bash

หากต้องการตอบความคิดเห็นของคุณถึงสิ่งนี้ตัวอักษรเปลี่ยนเส้นทาง> <| ถูกใช้เพื่อไพพ์ข้อมูลจากและเข้าสู่ไฟล์ (ยิ่งใหญ่และน้อยกว่าเครื่องหมาย) และเพื่อเชื่อมต่อเอาต์พุตของคำสั่งกับอินพุตของอีกอัน (ไพพ์ |) ดูที่นี่สำหรับบทแนะนำที่ดีเกี่ยวกับการเปลี่ยนเส้นทาง I / O นี่เป็นคุณสมบัติการออกแบบที่ทรงพลังมากของ Unix shell และชุดเครื่องมือ


ตกลงและเกี่ยวกับ>อะไร นั่นเป็นสัญญาณที่ฉันเห็นบ่อยเช่นกันฉันคิดว่ามันหมายถึง 'สำเนา' หรือบางสิ่งบางอย่าง สิ่งนี้ขึ้นอยู่กับคำสั่งด้วยหรือไม่
Exocity-G


3

1 หนึ่งในการค้นหาไฟล์ที่ลงท้ายใน.cจากภายในไดเรกทอรี~/และexecดินsed(แก้ไขปรับปรุง) ที่ sed searches สำหรับและการเปลี่ยนแปลงมันเข้าไปcybernetnewscybernet

อันที่สองจะลบล้างฉัน ... แสดงผลลัพธ์ที่ว่างเปล่าเมื่อดำเนินการ


เป็นไปได้มากว่าเป็นเพราะมันถูกนำมาจากคำถามอื่นที่นี่ ถ้าไม่มีบริบทมันก็ไม่ทำอะไรเลย
Execution-G

2

แหล่งข้อมูลที่ดีที่สุดที่ฉันพบสำหรับการเรียนรู้คำสั่งเทอร์มินัลคือLinuxCommandซึ่งให้คำอธิบายโดยละเอียดเกี่ยวกับคำสั่งที่ใช้มากที่สุด


ลิงก์ไม่ถูกต้องโปรดอัปเดตหรือลบ
flyingdrifter

2

เป็นการยากที่จะบอกความหมายทั้งหมดของสัญลักษณ์ขณะวางคำสั่งที่ซับซ้อน

โดยเฉพาะเสียงสะท้อน

ดู man echo สำหรับ -e มันช่วยให้หลบหนีได้ดังนั้นผู้มาสาย \ e จึงหลบหนี

สัญลักษณ์อื่น ๆ ส่วนใหญ่เป็นการจัดการสตริง

ลองจินตนาการว่าคุณมีตัวแปรฉันซึ่งมีสตริง "foo"

i=foo;echo $i
foo

แต่มันจะซับซ้อนมากขึ้นถ้าตัวแปรของคุณคือ $ i ซึ่งเป็นส่วนหนึ่งของสตริงด้วย

echo $ibar # Note: no output

echo ${i}bar # we have output
foobar

ตอนนี้คุณสามารถจัดการกับสตริงได้เช่นกันให้พิมพ์เพียงบางส่วน

ในกรณีของคุณ

$ {i # * =} = พิมพ์ $ i ถอนการจับคู่ที่สั้นที่สุดระหว่าง * และ = แต่ตัว * เป็นสัญลักษณ์แทน

echo ${i#o}
foo

echo ${i#*o}
o

ดูที่http://tldp.org/LDP/abs/html/string-manipulation.html

ต่อไปเรากดปุ่มเชลล์ (x ... )

Bash จะประมวลผลคำสั่งในเชลล์ย่อยและส่งคืนเอาต์พุตของคำสั่ง

x = (สตริงย่อยของ i); ต่อ

ตอนนี้เรามีการทดสอบ ["$ {! x}"]

ดู: http://tldp.org/LDP/abs/html/testconstructs.html

และที่นี่ฉันไม่สามารถบอกคุณได้อีกแล้ว

ใน bash, $ {! x} จะเป็นสตริงว่าง && == เชิงตรรกะและ || เป็นตรรกะหรือ

ทดสอบ {สตริงว่าง} และ echo สตริงว่างหรือ echo x

คุณจะต้องให้ซินแท็กซ์เพิ่มเติม แต่ดูเหมือนว่าเสียงก้องนี้กำลังส่งไปยังที่ใดที่หนึ่ง

อีกครั้ง [] คือการทดสอบและเรารอด [ตอนแรกมาก

ดังนั้นฉันสามารถอธิบายได้ว่าเสียงสะท้อนกำลังทำอะไรอยู่

สาเหตุที่ไม่มีเอาต์พุตเมื่อคุณป้อนคำสั่ง echo ในเทอร์มินัลเนื่องจากเป็นส่วนของรหัสโดยค่าเริ่มต้นจะไม่มีการกำหนด x หรือ i ดังนั้นเอาต์พุตทั้งหมดจึงว่างเปล่า


1

สำหรับคำถามเกี่ยวกับสัญลักษณ์ในภาษาเฉพาะคุณอาจต้องการลองSymbolHound คุณสามารถค้นหาอักขระที่ Google ไม่พบในเว็บได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.