Baik dalam bash dan zsh, nilai PS1
tidak digunakan sebagai prompt apa adanya, itu mengalami beberapa ekspansi. Aturan berbeda untuk dua kerang, tetapi dalam kedua kasus, salah satu langkah adalah untuk melakukan “dolar” ekspansi (variabel substitusi, substitusi perintah, evaluasi aritmatika) dengan sintaks yang sama seperti dalam sintaks shell normal ( , , atau , , ) .$VARIABLE
${VARIABLE}
$(COMMAND)
`COMMAND`
$((EXPRESSION))
$[EXPRESSION]
- Dalam bash, ekspansi dolar dihidupkan secara default, tetapi dapat dimatikan dengan
shopt -u promptvars
.
- Di zsh, ekspansi dolar tidak aktif secara default, tetapi banyak orang (dan sebagian besar kerangka kerja konfigurasi yang Anda temukan di web) mengaktifkannya
setopt prompt_subst
.
Dengan ekspansi dolar pada prompt diaktifkan, PS1='$(pwd)'
set PS1
ke nilai 6-karakter $(pwd)
dan dengan demikian menyebabkan $(pwd)
diganti, dan karena itu pwd
perintah yang akan dieksekusi, setiap kali shell menampilkan prompt baru. Di sisi lain, PS1=$(pwd)
set PS1
ke apa pun direktori aktif shell saat itu. Jika ekspansi dolar Anda dimatikan maka PS1='$(pwd)'
akan menyebabkan prompt menjadi string literal $(pwd)
.
Perhatikan bahwa ada cara yang lebih nyaman untuk mendapatkan direktori kerja di prompt:
- Dalam bash, dengan pelarian backslash seperti
\w
, yang menyingkat direktori home Anda ~
dan dapat dipangkas dengan pengaturan PROMPT_DIRTRIM
.
- Di zsh, dengan persen melarikan diri seperti
%/
atau%~
( %/
sama dengan $PWD
, %~
menyingkat direktori home), yang dapat memiliki pengaturan pemangkasan.
- Dalam kedua shell (dan shell Bourne-style lainnya),
$PWD
sama dengan $(pwd)
: Anda tidak perlu menjalankan subproses untuk mendapatkan direktori kerja saat ini.