ลบคำเฉพาะในตัวแปร


23

ในbashสคริปต์ฉันจะลบคำออกจากสตริงได้อย่างไรคำจะถูกเก็บไว้ในตัวแปร

FOO="CATS DOGS FISH MICE"
WORDTOREMOVE="MICE"

คำตอบ:


30

ลอง:

$ printf '%s\n' "${FOO//$WORDTOREMOVE/}"
CATS DOGS FISH

นอกจากนี้ยังทำงานในksh93, ,mkshzsh


POSIXLY:

FOO="CATS DOGS FISH MICE"
WORDTOREMOVE="MICE"

remove_word() (
  set -f
  IFS=' '

  s=$1
  w=$2

  set -- $1
  for arg do
    shift
    [ "$arg" = "$w" ] && continue
    set -- "$@" "$arg"
  done

  printf '%s\n' "$*"
)

remove_word "$FOO" "$WORDTOREMOVE"

"$WORDTOREMOVE"จะถือว่าคำพูดของคุณมีพื้นที่ที่คั่นและมีผลข้างเคียงว่าช่องว่างลบก่อนและหลัง


17

ใช้การแทนที่สตริงย่อย bash:

FOO = $ {FOO // $ WORDTOREMOVE /}

กระบวนการ // แทนที่สตริงย่อย ($ WORDTOREMOVE) ทั้งหมดที่มีเนื้อหาระหว่าง / และ} ในกรณีนี้ไม่มีอะไร

สำหรับข้อมูลเกี่ยวกับวิธีการนี้และวิธีอื่น ๆ ในการทำงานกับสตริงใน bash ให้ดูหัวข้อ10.1 การจัดการกับสายของขั้นสูงทุบตี Scripting คู่มือ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.