相关疑难解决方法(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万
查看次数

如何将一行划分为bash中由一个或多个空格分隔的单词?

我知道如何在python中做到这一点,只是用

line = db_file.readline()
ll=string.split(line)
Run Code Online (Sandbox Code Playgroud)

但我怎样才能在bash中做同样的事情呢?是否真的有可能以这么简单的方式做到这一点?

bash

43
推荐指数
8
解决办法
15万
查看次数

默认值赋值中的Bash Array值

我正在尝试将一个包含三个值的数组分配给变量,如果尚未使用该行分配的话

: ${SEAFILE_MYSQL_DB_NAMES:=(ccnet-db seafile-db seahub-db)}

不幸的是,回声${SEAFILE_MYSQL_DB_NAMES[@]}结果(ccnet-db seafile-db seahub-db)${SEAFILE_MYSQL_DB_NAMES[2]}没有打印任何内容.看来,该值已被解释为字符串而不是数组.有什么方法可以让我的脚本以这种方式分配数组吗?

这个问题出现在Debian Jessie上,有bash 4.3.30(如果重要的话,在docker容器中).有趣的是,相同的代码可以在Ubuntu 16.04上使用bash版本4.3.42,它可以像我期望的那样作为数组处理.

arrays bash default-value colon

6
推荐指数
1
解决办法
564
查看次数

如何根据给定的 ssh 密钥限制 git SSH 访问

我有一个私人 git 服务器,有一个用户git和 ssh 密钥身份验证。目前,我是唯一一个使用它的人,但我想添加更多人,我希望每个人都使用用户git连接到服务器并执行git clonegit push等等。如果所有存储库都是“公共”,那么我知道如何解决这。但例如我想要一个私有存储库,我仍将使用git clone git@server:repo我的 SSH 密钥进行克隆,但我不希望其他用户能够使用他们的 SSH 密钥来克隆它。

我检查了有关设置服务器的 git-scm 文档(这对公共存储库很有帮助),文章,但是这篇文章似乎只能解决私有存储库的问题。

TLDR:当您在 GitHub 上克隆存储库时,您会说git clone git@github.com:user/repo您的 git 用户名和 ssh 密钥将被发送过来。现在,根据您是否拥有此存储库的权限,您可以克隆它,否则则不能。所以基本上,每个人都在表面上使用git用户,但在幕后正在进行一些授权。例如,GitHub 如何处理这个问题?

git ssh ssh-keys

5
推荐指数
1
解决办法
4788
查看次数

如何从文件中读取变量,每行多个变量?

我正在尝试从一个文件中读取数据,该文件有多行,每行都有 3 个我想要分配给变量并使用的信息。

我想出了如何在终端上简单地显示它们,但无法弄清楚如何实际将它们分配给变量。

while read i
do
  for j in $i
  do
    echo $j
  done
done < ./test.txt
Run Code Online (Sandbox Code Playgroud)

测试.txt:

1 2 3
a b c
Run Code Online (Sandbox Code Playgroud)

所以我想读取外循环中的行,然后分配 3 个变量,然后使用它们,然后再进入下一行。

我猜我必须在没有内部循环的情况下读取行的值,但我现在无法弄清楚。

希望有人能指出我正确的方向。

bash shell

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

标签 统计

bash ×4

shell ×2

arrays ×1

colon ×1

default-value ×1

git ×1

scripting ×1

split ×1

ssh ×1

ssh-keys ×1