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ề
definedvàundefinedsai.${var:-word}trả vềwordnếuvarrỗng hoặc undefined, trong video là trường hợpvarrỗngundefined=. Muốn trả vềwordkhivarundefined dùng${var-word}.Hay quá, điểm này Đạt cứ lấn cấn hoài.