Laman » bagaimana untuk » Apakah Perbezaan antara Petikan Tunggal dan Ganda dalam Bash Shell?

    Apakah Perbezaan antara Petikan Tunggal dan Ganda dalam Bash Shell?

    Menutup teks dalam tanda petikan adalah amalan yang agak standard pada baris arahan, terutamanya apabila berurusan dengan fail yang mempunyai ruang dalam nama, tetapi bagaimana anda tahu sama ada menggunakan sebut harga tunggal atau berganda? Mari kita perhatikan perbezaannya, dan apabila anda perlu menggunakan satu sama lain.

    Peraturan am ialah petikan berganda yang masih membenarkan pengembangan pembolehubah dalam petikan, dan petikan tunggal tidak. Teruskan membaca.

    Petikan dengan Teks Mudah

    Jika anda hanya melampirkan beberapa perkataan teks, ia tidak kira yang anda gunakan, kerana kedua-duanya akan berfungsi dengan sama. Contohnya, kedua-dua perintah ini akan menghasilkan direktori bernama Test Directory:

    mkdir "Test Directory"
    mkdir 'Test Directory'

    Jenis yang lebih berpengalaman mungkin akan ambil perhatian bahawa anda juga boleh menggunakan mkdir Test \ Directory jika anda mahu.

    Pembesaran Variabel Shell

    Perbezaan antara petikan tunggal dan berganda menjadi lebih penting apabila anda berhadapan dengan pembolehubah pada baris arahan-secara lalai, bash akan memperluaskan pemboleh ubah seperti $ test ke dalam rentetan penuh. Pertama, kami akan memberikan pemboleh ubah:

    test = "Ini ujian"

    Sekarang anda boleh menggunakan pembolehubah ini pada baris arahan, seperti ini, yang sepatutnya hanya output Ini adalah ujian ke konsol:

    echo $ test

    Di sinilah perbezaan antara petikan berganda dan tunggal menjadi lebih jelas-apabila anda menggunakan petikan tunggal pemboleh ubah tidak akan diperluaskan. Sebagai contoh, jika anda menjalankan arahan ini:

    echo '$ test'

    Anda akan melihat apa-apa tetapi '$ test' pada baris arahan apabila anda menggunakan sebut harga tunggal, tetapi ia akan dikeluarkan dengan baik apabila anda menggunakan petikan berganda:

    Perkara yang sama berfungsi apabila anda menggunakan 'watak untuk mengembangkan perintah pada baris arahan. Sebagai contoh, katakan anda ingin menggunakannya pwd perintah dari dalam perintah lain-anda menggunakan backticks untuk memberitahu shell untuk mengembangkannya:

    echo 'pwd' / test

    Jika anda berada di dalam folder rumah anda, anda akan melihat output yang kelihatan seperti ini:

    / home / geek / test

    Katakanlah, sebagai contoh, anda berada dalam folder yang mempunyai ruang dalam laluan, dan anda ingin menggunakan perintah ln untuk membuat pautan simbolik ke fail dalam direktori semasa. Anda biasanya perlu menentukan laluan penuh apabila menggunakan arahan ln, jadi lebih mudah untuk menggunakan 'pwd' untuk menyimpan menaip.

    Lihat apa yang berlaku apabila anda mencuba dan menggunakan arahan tanpa melampirkan sebut harga:

    ln -s 'pwd' / test / home / geek / linkedname

    Sebaliknya, anda perlu mengelilingi sebut harga:

    ln -s "'pwd' / filename" / beberapa / lain / jalan

    Untuk contoh yang lebih konkrit, mari kita asumsikan bahawa kita mempunyai struktur folder seperti contoh ini, di mana semua nama fail mempunyai ruang di dalamnya:

    Oleh kerana arahan unzip tidak menyokong menggunakan * untuk menjalankannya terhadap semua fail, anda perlu menggunakan arahan untuk sebaliknya. Di sinilah perkara menarik:

    untuk f dalam * .zip; lakukan unzip $ f; selesai

    Oops! Sepertinya tidak berfungsi.

    Apa yang perlu kita lakukan sebaliknya menggunakan petikan berganda di sekitar pembolehubah $ f, seperti ini:

    untuk f dalam * .zip; lakukan unzip "$ f"; selesai

    Sekarang setiap kali arahan untuk pergi melalui gelung, ia akan benar-benar menjalankan arahan seperti ini:

    unzip "test 1.zip"

    Sudah tentu ia akan melengkung dan menjalankan arahan yang sama untuk setiap fail dalam direktori.

    Mari Tinjauan

    Sekarang bahawa kami telah melalui contoh-contoh, kami akan mengkaji dengan cepat sekiranya anda melepaskannya:

    Double Quotes

    • Gunakan apabila anda mahu menyertakan pemboleh ubah atau gunakan pengembangan shell di dalam rentetan.
    • Semua aksara dalam ditafsirkan sebagai aksara biasa kecuali $ atau 'yang akan diperluaskan pada shell.

    Petikan Tunggal

    • Semua aksara dalam petikan tunggal ditafsirkan sebagai watak rentetan.

    Dan dengan itu menamatkan pengajaran petikan. Gunakannya dengan bijak.