如何在Bash中的分隔符上拆分字符串?我將這個字符串存儲在一個變量中:IN="[email protected];[email protected]"現在我想用;劃界者使我有:ADDR1="[email protected]"ADDR2="[email protected]"我不一定需要ADDR1和ADDR2變量。如果它們是數組的元素,那就更好了。在以下答案提出建議后,我得出以下結論:#!/usr/bin/env bashIN="[email protected];[email protected]"mails=$(echo $IN | tr ";" "\n")for addr in $mailsdo
echo "> [$addr]"done產出:> [[email protected]]> [[email protected]]有一個解決方案涉及到內場分離器(IFS)至;。我不知道這個答案是怎么回事,你怎么重置?IFS回到默認狀態?關于:IFS解決辦法,我試過了,它成功了,我保留了舊的IFS然后恢復:IN="[email protected];[email protected]"OIFS=$IFS
IFS=';'mails2=$INfor x in $mails2do
echo "> [$x]"doneIFS=$OIFS順便說一句,當我試著mails2=($IN)只有在循環打印第一個字符串時,才得到第一個字符串,不帶括號。$IN它起作用了。
3 回答

慕俠2389804
TA貢獻1719條經驗 獲得超6個贊
IFS
read
IFS
IFS=';' read -ra ADDR <<< "$IN"for i in "${ADDR[@]}"; do # process "$i"done
;
$IN
;
:
while IFS=';' read -ra ADDR; do for i in "${ADDR[@]}"; do # process "$i" done done <<< "$IN"

斯蒂芬大帝
TA貢獻1827條經驗 獲得超8個贊
IN="[email protected];[email protected]"arrIN=(${IN//;/ })
';'
//
IN
' '
';'
' '
如果原始字符串有空格,則需要使用 IFS :IFS=':'; arrIN=($IN); unset IFS;
如果原始字符串有空格 和
分隔符是一個新行,您可以設置 有: IFS=$'\n'; arrIN=($IN); unset IFS;

交互式愛情
TA貢獻1712條經驗 獲得超3個贊
for i in $(echo $IN | tr ";" "\n")do # processdone
添加回答
舉報
0/150
提交
取消