相关疑难解决方法(0)

如何在Bash中的分隔符上拆分字符串?

我把这个字符串存储在一个变量中:

IN="bla@some.com;john@home.com"
Run Code Online (Sandbox Code Playgroud)

现在我想通过;分隔符拆分字符串,以便我有:

ADDR1="bla@some.com"
ADDR2="john@home.com"
Run Code Online (Sandbox Code Playgroud)

我不一定需要ADDR1ADDR2变量.如果它们是阵列的元素甚至更好.


根据以下答案的建议,我最终得到了以下内容,这就是我所追求的:

#!/usr/bin/env bash

IN="bla@some.com;john@home.com"

mails=$(echo $IN | tr ";" "\n")

for addr in $mails
do
    echo "> [$addr]"
done
Run Code Online (Sandbox Code Playgroud)

输出:

> [bla@some.com]
> [john@home.com]
Run Code Online (Sandbox Code Playgroud)

有一个涉及设置Internal_field_separator(IFS)的解决方案;.我不确定该答案发生了什么,你如何重置IFS为默认值?

RE:IFS解决方案,我试过这个并且它可以工作,我保持旧的IFS然后恢复它:

IN="bla@some.com;john@home.com"

OIFS=$IFS
IFS=';'
mails2=$IN
for x in $mails2
do
    echo "> [$x]"
done

IFS=$OIFS
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我试过的时候

mails2=($IN)
Run Code Online (Sandbox Code Playgroud)

我只是在循环打印时得到第一个字符串,没有括号围绕$IN它工作.

bash shell scripting split

1885
推荐指数
22
解决办法
204万
查看次数

将IFS设置为拆分换行符时,为什么需要包含退格键?

我很好奇为什么在设置IFS以分割这样的换行符时需要退格:

IFS=$(echo -en "\n\b")
Run Code Online (Sandbox Code Playgroud)

为什么我不能只使用它(这不起作用)呢?

IFS=$(echo -en "\n")
Run Code Online (Sandbox Code Playgroud)

我正在使用Unix行结尾保存文件的Linux系统上.我已经使用换行符将我的文件转换为十六进制,它肯定只使用"0a"作为换行符.

我已经google了很多,虽然许多页面都记录了换行符后面的换行符,但我找不到解释为什么需要退格键.

-大卫.

linux bash

59
推荐指数
4
解决办法
7万
查看次数

标签 统计

bash ×2

linux ×1

scripting ×1

shell ×1

split ×1