Một thời gian trước tôi đã giải quyết aliascho loại công việc này. Đây là một số câu trả lời khác của tôi:
Tuy nhiên, đôi khi có thể tách rời việc đánh giá và thực hiện các tuyên bố đó. Ví dụ, aliascó thể được sử dụng để đánh giá trước một lệnh. Trong ví dụ sau, định nghĩa biến được lưu vào bí danh chỉ có thể được khai báo thành công nếu $varbiến mà nó đang đánh giá không chứa byte nào không khớp với chữ số ASCII hoặc _.
LC_OLD=$LC_ALL LC_ALL=C
for var do    val=${var#*=} var=${var%%=*}
    alias  "${var##*[!_A-Z0-9a-z]*}=_$var=\$val" &&
    eval   "${var##[0-9]*}" && unalias "$var"
done;       LC_ALL=$LC_OLD
evalđược sử dụng ở đây để xử lý việc gọi mới aliastừ ngữ cảnh varname được trích dẫn - không phải cho phép gán chính xác. Và evalchỉ được gọi hoàn toàn nếu aliasđịnh nghĩa trước đó thành công và trong khi tôi biết rất nhiều cách triển khai khác nhau sẽ chấp nhận rất nhiều loại giá trị khác nhau cho tên bí danh, tôi vẫn chưa tìm thấy một vỏ sẽ chấp nhận một vỏ hoàn toàn trống .
_$varTuy nhiên, định nghĩa trong bí danh là dành cho và điều này là để đảm bảo rằng không có giá trị môi trường quan trọng nào được ghi lại. Tôi không biết về bất kỳ giá trị môi trường đáng chú ý nào bắt đầu bằng dấu _ và đó thường là đặt cược an toàn cho khai báo bán riêng.
Dù sao, nếu định nghĩa bí danh thành công, nó sẽ khai báo một bí danh được đặt tên cho $vargiá trị của. Và evalsẽ chỉ gọi rằng aliasnếu nó cũng không bắt đầu bằng một số - người khác evalchỉ nhận được một đối số null. Vì vậy, nếu cả hai điều kiện được đáp ứng đều evalgọi aliasvà định nghĩa biến được lưu trong đó aliasđược thực hiện, sau đó bí danh mới sẽ nhanh chóng bị xóa khỏi bảng băm.
Cũng hữu ích aliastrong bối cảnh này là bạn có thể in công việc của bạn. aliassẽ in một tuyên bố gấp đôi an toàn cho trích dẫn vỏ khi được yêu cầu.
sh -c "IFS=\'
    alias q=\"\$*\" q" -- \
    some args which alias \
    will print back at us
ĐẦU RA
q='some'"'"'args'"'"'which'"'"'alias'"'"'will'"'"'print'"'"'back'"'"'at'"'"'us'