Ý 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

Cái câu lệnh ${var/substring/replace} là để thay thế first match thì phải.

foo="value-4m"
bar=${foo/-4m/}

thay thế đoạn "-4m" -> ""
lâu rồi em không đụng đến không biết chính xác không :smile:

1 Like

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?

1 Like

@ltd: https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

2 Likes

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ề definedundefined sai.

${var:-word} trả về word nếu var rỗng hoặc undefined, trong video là trường hợp var rỗng undefined=. Muốn trả về word khi var undefined dùng ${var-word}.

1 Like

Hay quá, điểm này Đạt cứ lấn cấn hoài.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?