ไวยากรณ์สำหรับการเปรียบเทียบสตริงย่อยของสตริงหนึ่งกับตัวแปรสตริงใน bash คืออะไร

ฉันกำลังพยายามเปรียบเทียบสตริงย่อยของตัวแปรสตริงหนึ่งกับตัวแปรทั้งหมด และผลลัพธ์ออกมาเป็นเท็จเสมอ

COMP='<'
if [[ '${SNIP:0:1}' = '$COMP' ]] ;then
  LENG=6
elif [[ '${SNIP:1:1}' = '$COMP' ]] ;then
  LENG=7
else
  LENG=8
fi
echo $SNIP
echo ${SNIP:0:1}
echo ${SNIP:1:1}
echo $COMP
echo $LENG

ฉันได้ลองเช่นกันโดยเปรียบเทียบสตริงย่อยกับ '‹' แต่สิ่งนี้กลับคืนค่าจริงเสมอ

ฉันคาดหวังว่าผลลัพธ์จะเป็น

3<a
<
<
7

แต่ผลลัพธ์ก็คือ

3<a
<
<
8

และฉันไม่รู้ว่าเกิดอะไรขึ้น กรุณาช่วย. ขอบคุณ


person xehcimal    schedule 24.07.2019    source แหล่งที่มา
comment
ลองใช้เครื่องหมายคำพูดคู่ " แทนเครื่องหมายคำพูดเดี่ยว ' เมื่อใช้ตัวแปร   -  person Matthias    schedule 25.07.2019
comment
โอเค ว้าว ใช่แล้ว นั่นแหละ ขอบคุณมาก   -  person xehcimal    schedule 25.07.2019


คำตอบ (1)


เพียงใช้เครื่องหมายคำพูดคู่:

COMP='<'
if [[ "${SNIP:0:1}" = "$COMP" ]] ;then
  LENG=6
elif [[ "${SNIP:1:1}" = "$COMP" ]] ;then
  LENG=7
else
  LENG=8
fi
echo $SNIP
echo ${SNIP:0:1}
echo ${SNIP:1:1}
echo $COMP
echo $LENG

เครื่องหมายคำพูดเดี่ยวจะไม่สอดแทรกสิ่งใดๆ แต่เครื่องหมายคำพูดคู่จะสอดแทรก

https://stackoverflow.com/a/6697781/344480

person Matthias    schedule 24.07.2019