Trong cả bash và zsh, giá trị của PS1
không được sử dụng như một dấu nhắc, nó trải qua một số mở rộng. Các quy tắc khác nhau cho hai vỏ, nhưng trong cả hai trường hợp, một trong những bước là để thực hiện “đô la” mở rộng (thay biến, lệnh thay thế, đánh giá số học) với cú pháp tương tự như trong cú pháp vỏ bình thường ( , , hay , , ) .$VARIABLE
${VARIABLE}
$(COMMAND)
`COMMAND`
$((EXPRESSION))
$[EXPRESSION]
- Trong bash, mở rộng đô la được bật theo mặc định, nhưng có thể được tắt bằng
shopt -u promptvars
.
- Trong zsh, mở rộng đô la bị tắt theo mặc định, nhưng nhiều người (và hầu hết các khung cấu hình bạn sẽ tìm thấy trên web) bật nó lên
setopt prompt_subst
.
Khi mở rộng đô la trong lời nhắc được bật, PS1='$(pwd)'
đặt PS1
thành giá trị 6 ký tự $(pwd)
và do đó sẽ $(pwd)
được thay thế và do đó pwd
lệnh sẽ được thực thi, mỗi khi trình bao hiển thị một dấu nhắc mới. Mặt khác, PS1=$(pwd)
thiết lập PS1
bất cứ thứ gì là thư mục làm việc hiện tại của shell tại thời điểm đó. Nếu bạn đã tắt mở rộng đô la thì PS1='$(pwd)'
sẽ khiến dấu nhắc là chuỗi ký tự $(pwd)
.
Lưu ý rằng có nhiều cách thuận tiện hơn để nhận thư mục làm việc trong lời nhắc:
- Trong bash, với một dấu gạch chéo ngược như
\w
, viết tắt thư mục chính của bạn ~
và có thể được cắt bớt bằng cách cài đặt PROMPT_DIRTRIM
.
- Trong zsh, với một phần trăm thoát như
%/
hoặc%~
( %/
giống như $PWD
, %~
viết tắt các thư mục chính), có thể có một cài đặt cắt xén.
- Trong một trong hai shell (và bất kỳ shell kiểu Bourne nào khác),
$PWD
tương đương với $(pwd)
: bạn không cần phải chạy một quy trình con để có được thư mục làm việc hiện tại.