30/09/2018, 16:28
Ý nghĩa của phép gán foo="${bar/-4m/}" trong bash shell?
Minh có một đoạn code như thế này
foo="${bar/-4m/}"
-4m
chỉ là một đoạn text thôi. foo
là local variable, bar
là input. Mình đã thử echo $foo
với đầu vào bar
khác nhau, có và không có đoạn -4m
. Nhưng kết quả $foo
lại vẫn giống nhau.
Ví dụ:
Trường hợp 1:
#! /bin/bash
bar="value-4m"
foo="${bar/-4m/}"
echo $foo
Output:
value
Trường hợp 2:
#! /bin/bash
bar="value"
foo="${bar/-4m/}"
echo $foo
Output:
value
Thêm một thông tin nữa là nếu mình có một cái if
thì kết quả trả ra khá lạ
#! /bin/bash
foo="value"
echo "foo" $foo
bar="${foo/-4m/}"
echo "bar" $bar
if [ "$foo" = "$bar" ]; then
echo "equal"
else
echo "!equal"
fi
Output:
foo value
bar value
equal
Nếu đổi foo="value-4m"
thì kết quả ra
foo value-4m
bar value
!equal
Bài liên quan
Cái câu lệnh
${var/substring/replace}
là để thay thế first match thì phải.thay thế đoạn
"-4m" -> ""
lâu rồi em không đụng đến không biết chính xác không
Anh nghĩ là câu trả lời của em chính xác rồi. Em có link tới cái chỗ nào nói về câu lệnh này không?
@ltd: https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
Hơi lười đọc nên Đạt tìm 1 video để xem thử, thì thấy video này nói khá kỹ.
Ví dụ về
defined
vàundefined
sai.${var:-word}
trả vềword
nếuvar
rỗng hoặc undefined, trong video là trường hợpvar
rỗngundefined=
. Muốn trả vềword
khivar
undefined dùng${var-word}
.Hay quá, điểm này Đạt cứ lấn cấn hoài.