Terminal Friday: Bash [การขยายคีย์]

ก่อนอื่นต้องขออภัยเนื่องจากเมื่อวันศุกร์ที่แล้วฉันไม่สามารถเขียนโพสต์ได้ดังนั้นวันนี้ฉันจะเพิ่มพิเศษเพื่อชดเชยวันที่หายไป 🙂

การขยายตัวของรั้ง

ในภาษาสเปนการขยายคีย์สำหรับฉันดูเหมือนจะเป็นฟังก์ชันที่ได้รับแรงบันดาลใจจาก C เชลล์ซึ่งจะสร้างชุดค่าผสมระหว่างอักขระที่ป้อนภายในวงเล็บปีกกาลำดับที่ใช้คือจากซ้ายไปขวา ไม่ซับซ้อนเลย แต่เป็นตัวเลือกที่จะมีประโยชน์มากในการเยี่ยมชม GNU / Linux ของเรา

ตัวอย่าง:

$ echo a {1,2,3} a1 a2 a3

เมื่อใช้กับลูกน้ำ - สร้างชุดค่าผสมระหว่างค่า a และค่าภายในวงเล็บปีกกา หากไม่มีค่านอกคีย์จะแสดงเพียงครั้งเดียวในแต่ละค่าที่คีย์นั้นมี

$ echo {a, b, c} abc

การใช้งานไม่ซับซ้อนเลยมีตัวอย่างทั่วไปอื่น ๆ เช่นการสร้างไดเรกทอรีจำนวนมากในโฟลเดอร์

$ mkdir ~ / งาน / {หนึ่งสองสามสี่ห้า}

สิ่งนี้จะสร้างโฟลเดอร์ห้าโฟลเดอร์ภายในโฟลเดอร์งานเหมือนกับการป้อนคำสั่งทีละคำสั่ง การสร้างไดเรกทอรี 5 รายการ

มีการขยายตัวสองจุด .. สิ่งนี้จะสร้างชุดของตัวเลขหรืออักขระที่เปลี่ยนจากค่าเริ่มต้นไปยังค่าสุดท้ายอย่าใช้ตัวเลขที่มีตัวอักษร

$ echo {1..5} #Correct 1 2 3 4 5 $ echo {a..f} #Correct abcdf $ echo {a..5} #Incorrect {a..5} # ฉันคิดว่าฉันจะไม่มีทางได้ ใช้กับสีฟ้าในตัวอักษร

เราสามารถประหยัดเวลาได้ด้วยการสร้างวงจร for

# แทนที่จะเขียน $ for ((i = 1; i <= 5; i ++)); ทำ echo "My number $ i"; done My number 1 My number 2 My number 3 My number 4 My number 5 #Save code using brace expand. $ สำหรับฉันใน {1..5}; ทำเสียงสะท้อน "My number $ i; done My number 1 My number 2 My number 3 My number 4 My number 5. 1 My number 5 My number 1 My number 2 My number 3

ฉันคิดว่าคอนเซปต์ชัดเจนแล้วฮ่าฮ่าตอนนี้ฉันจะแสดงความคิดเห็นเพียงว่ามันสามารถใช้ร่วมกันได้และซ้อนกันฉันหมายถึงอะไร?
ด้วย Combinable ที่เราสามารถเข้าร่วมคีย์ได้ตั้งแต่หนึ่งคีย์ขึ้นไป

$ echo {a..c} {1..3} a1 a2 a3 b1 b2 b3 c1 c2 c3

ด้วยการซ้อนกันอย่างที่หลายคนคิดว่าคุณสามารถใช้คีย์การขยายภายในคีย์ส่วนขยายได้

$ echo {a, c {1..3}, d} a c1 c2 c3 d

และสุดท้ายจาก ทุบตีไม่มีอะไร เป็นไปได้ที่จะเพิ่มค่า

$ echo {0..20..2} 0 2 4 6 8 10 12 14 16 18 20

ทั้งหมดนี้สำหรับวันนี้ขอบคุณที่อ่านฉันด้วยคน🙂

พิเศษ

วิธีสร้างถังขยะในเครื่อง

เมื่อฉันพูดว่า ถัง local ฉันหมายถึงไดเร็กทอรีที่เรามีสคริปต์ของเราเองและเป็นไปได้ที่จะเรียกใช้งานเป็นคำสั่งง่ายๆ ...

การบรรลุสิ่งนี้ค่อนข้างง่ายสิ่งแรกที่คุณต้องทำคือสร้างไดเร็กทอรีที่เราจะบันทึกสคริปต์

mkdir ~ / .bin # ในตัวอย่างนี้จะถูกซ่อน

ตอนนี้เรามีโฟลเดอร์ของเราสำหรับบันทึกสคริปต์ แต่จะไม่ทำงานจนกว่าเราจะเพิ่มเส้นทางของ. bin ใหม่เป็น $ PATH
สำหรับไฟล์นี้มีการแก้ไข bash_profileและมีการเพิ่มบรรทัด

ส่งออก PATH = $ PATH: ~ / .bin

และ voila ที่เพียงพอสำหรับการสร้าง local bin แน่นอนว่ามันจะขอสิทธิ์ root ถ้าจำเป็นสำหรับตัวอย่างที่เราเขียนสคริปต์ด่วน

#! / bin / bash echo "สวัสดี $ 1 สบายดีไหม"

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

$ hello wada # นี่จะแสดงข้อความ Hello wada, how are you?

ดังนั้นด้วยเคล็ดลับด่วนนี้คุณสามารถเรียกใช้สคริปต์ของคุณได้เร็วขึ้น

นั่นคือทั้งหมดสำหรับวันนี้คนที่สบายดี🙂
ปล. ขออภัยในความผิดพลาดถ้ามีตาจะปิดแล้วนะคะ XNUMX 😀


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   นักล่า dijo

    ฉันอยู่ในปัญหาทุบตีมานานแล้วและฉันไม่เข้าใจการขยายวงเล็บปีกกาเหล่านี้ขอบคุณ

    บนเคล็ดลับเส้นทางโดยค่าเริ่มต้น Fedora จะทำสิ่งนี้ แต่ใน "~ / .local / bin" ให้ดูตัวอย่างจาก bash_profile ที่ฉันนำมาให้ Jessie

    PATH = $ PATH: $ HOME / .local / bin: $ HOME / bin
    ส่งออกเส้นทาง

    1.    ริคาร์โด้ dijo

      ฉันมีข้อกังวล:
      1. ฉันจะให้เขาแบ่งช่วงเวลาสองช่วงด้วยการขยายจุด อายุ {1..24,55..90} และฉันขยายอายุจาก 1 เป็น 24 และต่อด้วย 55 ถึงเก้าสิบ อย่างที่ฉันทำมันไม่ได้ผล ทำไม?

      2. ถ้าฉันต้องการให้ค่าแรกเป็นโมฆะและดำเนินการต่อด้วยการกำหนดหมายเลข:
      ตกลง: http://manga.favorito /ภาพ http://manga.favorito/imagen1
      ฉันลองทำตามวิธีต่อไปนี้ แต่ไม่ได้รับ wget: http://manga.favorito/imagen{, 1..42} ตามฉันฉันจะต้องปล่อยให้ชื่อแรกโดยไม่มีตัวเลขและดำเนินการต่อด้วยการนับจาก 1 ถึง 42 แต่มันไม่เป็นเช่นนั้น ทำไม?

    2.    วาดะ dijo

      คุณพูดถูกที่บางคนมีหรือมี. bin แต่เพื่อให้ทุกคนเข้าใจและเห็นว่ามันเป็นไปได้ที่จะทำมันในทุก ๆ มิติ: D ขอบคุณที่แวะมา

  2.   สาธิต dijo

    ดีมากสำหรับการมีส่วนร่วมของความรู้เหล่านี้ต่อโลกของลินุกซ์และความปลอดภัยบางวันศุกร์ฉันหวังว่าฉันจะได้อ่านวิธีฟอร์แมตเพนไดรฟ์ในเทอร์มินัลและเบิร์นอิมเมจ iso DVD / CD ของระบบฟรีใด ๆ ในเทอร์มินัล

    1.    วาดะ dijo

      ขอบคุณสำหรับคำพูดของคุณพี่ชาย😀ฉันสัญญาว่าวันศุกร์หน้าฉันจะโพสต์นั้น และฉันต้องมีอย่างใดอย่างหนึ่งเกี่ยวกับการปรับแต่ง Vim ฮ่า ๆ ๆ แต่ฉันไม่อยากให้พวกเขาคิดว่ามันจะครอบคลุมแค่ Vim เท่านั้น

  3.   เอโดอาร์โด_หรือ dijo

    บทความเทอร์มินัลที่ยอดเยี่ยมดีที่สุดที่ฉันเคยอ่านมาเป็นเวลานานโดยมีหลายบล็อกที่เผยแพร่แบบฝึกหัดสไตล์นี้ ขอบคุณมาก!!

    1.    วาดะ dijo

      ขอบคุณมาก😀ฉันจะพยายามทำต่อไป

  4.   Juanli dijo

    เคล็ดลับที่ยอดเยี่ยมของถังขยะท้องถิ่น!
    ทักทาย!

    1.    วาดะ dijo

      ยอดเยี่ยมมากเยี่ยมมากที่มีประโยชน์กับคุณขอบคุณมากที่ผ่านพี่ชาย😀

  5.   กิสการ์ด dijo

    ดีมาก! ไม่มีความคิดเกี่ยวกับเรื่องนี้ ขอบคุณ🙂

    1.    วาดะ dijo

      ยินดีต้อนรับพี่ชายขอบคุณที่สละเวลาอ่าน😀

  6.   ริคาร์โด้ dijo

    ฉันมีข้อกังวล:
    1. ฉันจะให้เขาแบ่งช่วงเวลาสองช่วงด้วยการขยายจุด อายุ {1..24,55..90} และฉันขยายอายุจาก 1 เป็น 24 และต่อด้วย 55 ถึงเก้าสิบ อย่างที่ฉันทำมันไม่ได้ผล ทำไม?

    2. ถ้าฉันต้องการให้ค่าแรกเป็นโมฆะและดำเนินการต่อด้วยการกำหนดหมายเลข:
    ตกลง: http://manga.favorito/imagen http://manga.favorito/imagen1

    ฉันลองทำตามวิธีต่อไปนี้ แต่ไม่ได้รับ wget: http://manga.favorito/imagen{, 1..42} ตามฉันฉันจะต้องปล่อยให้ชื่อแรกโดยไม่มีตัวเลขและดำเนินการต่อด้วยการนับจาก 1 ถึง 42 แต่มันไม่เป็นเช่นนั้น ทำไม?
    * ขออภัยที่ตั้งกระทู้ครั้งแรกเป็นคำตอบและผิดพลาดในบางส่วน

    1.    วาดะ dijo

      1.- ตรรกะของคุณผิดคุณต้องรังมันฮ่า ๆ ๆ ลองด้วย $ echo {{1..24},{55..90}}

      2.- เหมือนกับข้อที่แล้ว ... $ echo "URL"{,{1..42}}

      ไม่ต้องกังวลพี่ชายเราอยู่ที่นี่เพื่อช่วยเรา🙂

  7.   เจวีเค85321 dijo

    ในการแทนที่ for ด้วย echo จะมีลักษณะดังนี้

    echo "หมายเลขของฉัน" {1..5} $ '\ n' | sed -e: a -e '$! N; s / \ n / \ n /; ta' | sed -e: ก -e '$! N; s / 5 \ n / 5 /; ta'

    แต่ฉันชอบ printf

    printf "ฉันฉัน% d \ n" {1..5}

    และใช้แนวคิดเดียวกันในการขยายคีย์

    atte
    เจวีเค85321

    1.    เจวีเค85321 dijo

      คุณใส่กล่องขั้วอย่างไร ????

      atte
      เจวีเค85321

  8.   เจวีเค85321 dijo

    ทดสอบว่าแท็กโค้ดทำงานหรือไม่
    ฮิฮิ

    ในการแทนที่ for ด้วย echo จะมีลักษณะดังนี้

    echo “Mi numero “{1..5}$’\n’ | sed -e :a -e ‘$!N;s/\n /\n/;ta’ | sed -e :a -e ‘$!N;s/5\n/5/;ta’

    pero prefiero printf

    printf “Mi numero %d\n” {1..5}

    และใช้แนวคิดเดียวกันในการขยายคีย์

    atte
    เจวีเค85321

    1.    เจวีเค85321 dijo

      ฉันเหลือข้อบกพร่องบางอย่าง แต่ก็ใช้งานได้

      ฉันยังมีชีวิตอยู่ maluco

      ขออภัยที่รบกวน

      atte
      เจวีเค85321

      1.    วาดะ dijo

        ฮ่า ๆ ๆ คุณตอบเอง แต่ถ้าอยู่ระหว่างป้าย ไม่มีช่องว่าง ...

        และในการเปลี่ยนท่อไม่จำเป็นต้องทำท่อมากนักฮ่าฮ่าฮ่าพอกับ:
        echo -e "Mi numero "{1..5}"\n\b"

        พูดตามตรงว่า printf เป็นวิธีที่ดีที่สุดในการพิมพ์ข้อความในสคริปต์มันเป็นแบบพกพามากกว่า แต่โดยทั่วไปแล้วจะใช้เสียงสะท้อน

      2.    วาดะ dijo

        ฉันใช้ช่องว่าง! XNUMX

        มาดูกันเลย😀

      3.    วาดะ dijo

        เชี่ยมัน "น้อยกว่า" รหัส "มากกว่า" "น้อยกว่า" / รหัส "มากกว่า" ฮ่า ๆ ๆ ๆ

      4.    เจวีเค85321 dijo

        ปัญหาที่ echo -e ไม่ได้มาตรฐานจึงไม่สามารถใช้ได้กับทุกระบบ

        ยังออกมายุ่ง
        jvk@jvktos:~$ echo -e "Mi numero "{1..5}"\n\b"
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5

        jvk@jvktos:~$
        และด้วยสิ่งนี้
        jvk@jvktos:~$ echo "Mi numero "{1..5}$'\n' | sed -e :a -e '$!N;s/\n /\n/;ta' | sed -e :a -e '$!N;s/5\n/5/;ta'
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5
        jvk@jvktos:~$

        ผมคิดว่าอย่างที่สองให้ผลลัพธ์ที่ดีกว่าฮ่า ๆ ๆ

        atte
        เจวีเค85321

      5.    เจวีเค85321 dijo

        ป้ายเหล่านี้เป็นคนเกียจคร้านฮิฮิฮิมาดูกันว่าตอนนี้ใช้งานได้หรือไม่
        jvk@jvktos:~$ echo -e "Mi numero "{1..5}"\n\b"
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5
        jvk@jvktos:~$

        และด้วยสิ่งนี้
        jvk@jvktos:~$ echo "Mi numero "{1..5}$'\n' | sed -e :a -e '$!N;s/\n /\n/;ta' | sed -e :a -e '$!N;s/5\n/5/;ta'
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5
        jvk@jvktos:~$

        ผมคิดว่าอย่างที่สองให้ผลลัพธ์ที่ดีกว่าฮ่า ๆ ๆ
        atte
        เจวีเค85321

      6.    เจวีเค85321 dijo

        ยังไงก็เว้นช่องว่างระหว่างบรรทัดนั่นคือเหตุผลว่าทำไมฉันถึงเกลียด html ฮ่า ๆ ๆ ๆ

  9.   Joaquin dijo

    ยอดเยี่ยม! ปรบมือรัว ๆ เลยค่ะ XNUMX

    ฉันไม่รู้ว่าคีย์สามารถซ้อนกันได้เนื่องจากฉันไม่เคยลองใช้เลยมันช่วยประหยัดรหัสได้มากและยังอ่านได้ง่ายกว่าด้วยวิธีนี้ ขอขอบคุณ!

    1.    วาดะ dijo

      ขอบคุณพี่ชายที่ผ่านมาฉันดีใจที่มันเป็นประโยชน์สำหรับ utilidad

      1.    Joaquin dijo

        ยินดีต้อนรับเรามาที่นี่เพื่อแบ่งปันและให้ความคิด ฉันไม่รู้ว่าจะเขียนโปรแกรมอย่างไรฉันเพิ่งทำสองสามอย่างใน Bash และฉันได้เผยแพร่สคริปต์บางส่วนที่ฉันทำในสองโพสต์ ฉันคิดว่าการรู้สิ่งนี้สามารถทำให้โค้ดเข้าใจง่ายขึ้น