GNU/Linux >> Belajar Linux >  >> Linux

Mengulangi elemen variabel jalur di Bash

Anda dapat menggunakan ekspansi parameter substitusi pola Bash untuk mengisi variabel loop Anda. Misalnya:

MANPATH=/usr/lib:/usr/sfw/lib:/usr/info

# Replace colons with spaces to create list.
for path in ${MANPATH//:/ }; do
    echo "$path"
done

Catatan:Jangan sertakan perluasan substitusi dalam tanda kutip. Anda ingin nilai yang diperluas dari MANPATH ditafsirkan oleh for-loop sebagai kata-kata terpisah, bukan sebagai string tunggal.


Anda dapat menyetel Pemisah Bidang Internal:

( IFS=:
  for p in $MANPATH; do
      echo "$p"
  done
)

Saya menggunakan subkulit sehingga perubahan di IFS tidak tercermin di shell saya saat ini.


Cara kanonik untuk melakukan ini, di Bash, adalah dengan menggunakan read bawaan dengan tepat:

IFS=: read -r -d '' -a path_array < <(printf '%s:\0' "$MANPATH")

Ini adalah satu-satunya solusi yang kuat:akan melakukan apa yang Anda inginkan:pisahkan string pada pembatas : dan aman sehubungan dengan spasi, baris baru, dan karakter glob seperti * , [ ] , dll. (tidak seperti jawaban lainnya:semuanya rusak).

Setelah perintah ini, Anda akan memiliki larik path_array , dan Anda dapat mengulanginya:

for p in "${path_array[@]}"; do
    printf '%s\n' "$p"
done

Linux
  1. Skrip bash(I)

  2. Menetapkan Hanya Bagian Dari String Ke Variabel Di Bash?

  3. Menambahkan entri baru ke variabel PATH di ZSH

  1. Keluar dari kode penugasan variabel ke substitusi perintah di Bash

  2. Implikasi keamanan menggunakan jalur relatif dalam variabel lingkungan PATH?

  3. bash - pencocokan variabel case-insensitive

  1. Menyesuaikan shell Bash

  2. Looping Melalui File Dengan Spasi Dalam Nama??

  3. Basa'?