Những câu trả lời đã được đăng chắc chắn đúng, nhưng nó có thể là giá trị cần lưu ý rằng việc mở rộng thỉnh thoảng tham số có thể phục vụ cùng một mục đích với lẽ một số tính linh hoạt bổ sung.
% p() { printf 'notvar = %b\n' "${notvar##"${string1}"}${string2}" ; }
% string1='some stuff about things\c'
% string2='some different stuff maybe'
% notvar="$string1" p
> 'some different stuff maybe'
% notvar="$string2" p
> 'some stuff about things'
Ok, vì vậy ở trên là không siêu hữu ích như là, mà còn xem xét mà bạn có thể sử dụng phương pháp tương tự cho các biến thử nghiệm ở đây-tài liệu, in-line tập biến nếu cần thiết (ở một mức độ ...), hoặc thậm chí chỉ là một phương thức ngắn hơn (và nhanh hơn!) để viết câu lệnh đầu tiên của bạn.
[ ! "${var##"string"}" ] && _MATCH || _NOMATCH
Hoặc thậm chí ...
[ ${#var#*"${s=string}"} -lt ${#var} ] && _SUB_STRING_TEST=TRUE
Có thể thậm chí ...
% p() { printf '%s is %s of %s' "$2" "${var_chk-not}" "$1"
> }<<HEREDOC
> ${in="${1##*"${2}"*}"}
> ${in:-
> ${in="${1##"${2}"}"}
> ${in:-${var_chk=all}
> ${var_chk=some}
> }
> HEREDOC
%
Bạn có thể sử dụng '[[$ var ==" string "]]', là POSIX, nhưng tùy chọn (afaik). Hoặc bạn sử dụng '[" $ var "=" string "]'. Lưu ý '" "' xung quanh biến trong phiên bản dấu ngoặc đơn: nó được yêu cầu trong trường hợp '$ var' là trống –
Phần quan trọng là dấu ngoặc kép quanh' $ var' như đã được đề cập. Không có dấu ngoặc kép, '[$ var =" value "]' trở thành '[=" value "]' gây nhầm lẫn cho shell khá khủng khiếp. Có thể bạn sẽ thấy một lỗi như _ "[: =: unary operator expected" _ khi bạn gặp phải một biến trống. –
Tôi hiểu về "$ var" so với $ var, vấn đề của tôi là == vs. = – LiraNuna