Tôi làm việc trong một môi trường tương đối không đồng nhất, nơi tôi có thể đang chạy các phiên bản Bash khác nhau trên các nút HPC, VM hoặc máy trạm cá nhân khác. Bởi vì tôi đặt các tập lệnh đăng nhập của mình trong một repo Git, tôi muốn sử dụng cùng (ish) .bashrctrên bảng, mà không có nhiều "nếu máy chủ này, thì ..." - gõ lộn xộn.
Tôi giống như hành vi mặc định của Bash ≤ 4.1 mà mở rộng cd $SOMEPATHvào cd /the/actual/pathkhi nhấn Tabphím. Trong Bash 4.2 trở lên, bạn sẽ cần phải shopt -s direxpandkích hoạt lại hành vi này và điều đó không khả dụng cho đến 4.2,29 . Đây chỉ là một ví dụ; một shopttùy chọn khác, có thể liên quan , complete_fullquote(mặc dù tôi không biết chính xác nó làm gì) cũng có thể đã thay đổi hành vi mặc định tại v4.2.
Tuy nhiên, direxpandkhông được công nhận bởi các phiên bản trước đó của Bash, và nếu tôi cố gắng shopt -s direxpandtrong tôi .bashrc, mà kết quả trong một thông báo lỗi được in ra cửa sổ Console mỗi khi tôi đăng nhập vào một nút với một Bash trở lên:
-bash: shopt: direxpand: invalid shell option name
Những gì tôi muốn làm là bao bọc một điều kiện xung quanh shop -s direxpandđể cho phép tùy chọn đó trên Bash> 4.1 một cách mạnh mẽ, mà không làm hỏng các phiên bản cũ hơn của Bash ( nghĩa là không chỉ chuyển hướng đầu ra lỗi sang /dev/null).
.bashrc. Tôi vẫn muốn có một bản ghi về cách sử dụng $BASH_VERSINFOđể thẩm vấn phiên bản chính / phụ của shell đang chạy, vì sự chỉnh sửa của riêng tôi, đó là lý do tại sao tôi hoàn thành việc đăng câu trả lời của riêng mình. :)