簡體   English   中英

帶/不帶空格的Bash字符串操作

[英]Bash string manipulation with/without whitespaces

考慮在bash中使用String來保存項目列表:

# BLUBB="item foobar blubb bar"

進一步考慮有一個排除項目清單:

# EXCLUDE="item bar blubb"

解決此問題的最簡單方法是將列表保存為不包含BLUBB的列表。 我的第一種方法是:

# for i in $EXCLUDE; do BLUBB=${BLUBB//$i/}; done

但這還從foobar刪除了bar 如此看來,在$i前后都必須尋找空白或什么也沒有。 語法如何?

可以這樣做:

#/bin/bash
BLUBB="item foobar blubb bar"
EXCLUDE="item bar blubb"
for word in ${BLUBB} ${EXCLUDE} ${EXCLUDE}; do
    echo ${word}
done | sort | uniq -u

我會在bash中使用關聯數組進行此操作:

$ BLUBB="item foobar blubb bar"
$ EXCLUDE="item bar blubb"
$ declare -A h
$ for word in $BLUBB; do h[$word]=1; done
$ declare -p h
declare -A h='([blubb]="1" [bar]="1" [foobar]="1" [item]="1" )'
$ for word in $EXCLUDE; do unset "h[$word]"; done
$ declare -p h
declare -A h='([foobar]="1" )'
$ words="${!h[*]}"
$ echo "$words"
foobar

如果BLUBB或EXCLUDE中的任何“單詞”包含空格,則必須使用索引數組來保存它們:

$ BLUBB=(item foobar blubb bar "word with spaces")
$ EXCLUDE=(item bar blubb with)
$ declare -A h
$ for elem in "${BLUBB[@]}"; do h["$elem"]=1; done
$ for elem in "${EXCLUDE[@]}"; do unset "h[$elem]"; done
$ declare -p h
declare -A h='(["word with spaces"]="1" [foobar]="1" )'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM