Nếu tôi chạy các lệnh này từ một tập lệnh:
#my.sh
PWD=bla
sed 's/xxx/'$PWD'/'
...
$ ./my.sh
xxx
bla
nó ổn
Nhưng, nếu tôi chạy:
#my.sh
sed 's/xxx/'$PWD'/'
...
$ ./my.sh
$ sed: -e expression #1, char 8: Unknown option to `s'
Tôi đã đọc trong hướng dẫn rằng để thay thế các biến môi trường từ shell, bạn cần dừng lại và 'trích dẫn' $varname
phần để nó không được thay thế trực tiếp, đó là những gì tôi đã làm và chỉ hoạt động nếu biến được xác định ngay trước đó.
Làm thế nào tôi có thể có được sed để nhận ra một $var
biến môi trường như được định nghĩa trong shell?
set -x
trong shell để lấy shell để lặp lại từng lệnh ngay trước khi nó thực thi chúng. Điều này có thể làm sáng tỏ rất nhiều nhầm lẫn. (Ngoài ra, tôi thường sử dụng set -u
để biến các biến unset tham chiếu thành một lỗi khó. (Xem thêm set -e
.))