ในbash
สคริปต์ฉันจะลบคำออกจากสตริงได้อย่างไรคำจะถูกเก็บไว้ในตัวแปร
FOO="CATS DOGS FISH MICE"
WORDTOREMOVE="MICE"
ในbash
สคริปต์ฉันจะลบคำออกจากสตริงได้อย่างไรคำจะถูกเก็บไว้ในตัวแปร
FOO="CATS DOGS FISH MICE"
WORDTOREMOVE="MICE"
คำตอบ:
ลอง:
$ printf '%s\n' "${FOO//$WORDTOREMOVE/}"
CATS DOGS FISH
นอกจากนี้ยังทำงานในksh93
, ,mksh
zsh
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"
จะถือว่าคำพูดของคุณมีพื้นที่ที่คั่นและมีผลข้างเคียงว่าช่องว่างลบก่อนและหลัง
ใช้การแทนที่สตริงย่อย bash:
FOO = $ {FOO // $ WORDTOREMOVE /}
กระบวนการ // แทนที่สตริงย่อย ($ WORDTOREMOVE) ทั้งหมดที่มีเนื้อหาระหว่าง / และ} ในกรณีนี้ไม่มีอะไร
สำหรับข้อมูลเกี่ยวกับวิธีการนี้และวิธีอื่น ๆ ในการทำงานกับสตริงใน bash ให้ดูหัวข้อ10.1 การจัดการกับสายของขั้นสูงทุบตี Scripting คู่มือ