GNU/Linux >> Belajar Linux >  >> Linux

Gunakan Ekspansi Parameter Untuk Memodifikasi Output Ekspansi Lain?

Saya mencoba menggunakan perluasan parameter Bash untuk mengubah output dari substitusi perintah atau perluasan parameter lainnya.

Ekspansi bersarang berikut bekerja cukup baik di Zsh; tetapi menghasilkan kesalahan "substitusi buruk" di Bash:

${${PWD##*/}//trunk/latest}

atau

${$(basename $PWD)//trunk/latest}

output harus menjadi folder terakhir dari $PWD , diganti dengan latest ketika direktori saya saat ini adalah trunk

jadi /home/user/trunk harus menjadi latest

Apakah ada padanan Bash yang memungkinkan untuk melakukan ekspansi rantai tanpa bergantung pada variabel atau pipa? Atau apakah ekspansi Bash hanya mengizinkan input berupa string atau variabel biasa?

Jawaban yang Diterima:

Tidak, penyarangan operator substitusi itu unik untuk zsh .

Perhatikan bahwa dengan zsh seperti dengan (t)csh , Anda juga dapat melakukan ${PWD:t:s/trunk/latest/} .

Padahal bash juga mendukung pengubah riwayat csh untuk perluasan riwayat, itu tidak mendukung mereka untuk perluasan parameternya.

Di sini dengan bash , gunakan variabel sementara:

var=${PWD##*/} var=${var//trunk/latest}

Linux
  1. Ekspansi &Variabel Bash Brace?

  2. Mengapa Saya Tidak Dapat Menggunakan Cd Dalam Skrip Bash??

  3. Apakah `~#` Sebuah Ekspansi Tilde Dari Bash?

  1. Cara menggunakan perintah riwayat Bash

  2. Shell Mana yang Harus Saya Gunakan – Tcsh Vs Bash??

  3. konversi keluaran bash `ls` ke array json

  1. Bagaimana Cara Melihat Output Dari Proses yang Berjalan Di Sesi Bash Lain?

  2. Gunakan $[ Ekspr ] Alih-alih $(( Ekspr ))?

  3. Gunakan Ekstensi .sh Atau .bash Untuk Skrip Bash?