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}