相关疑难解决方法(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 - 测试一个字符串是否比另一个字符串"更大" - 它是如何在内部工作的?

在Bash中,我可以编写以下测试

[[ "f" > "a" ]]
Run Code Online (Sandbox Code Playgroud)

这导致返回0,即为真.bash如何实际执行此字符串比较?从我的理解>做一个整数比较.它是否尝试比较操作数的ASCII值?

bash numeric-conversion

23
推荐指数
2
解决办法
3万
查看次数

如何在数组中找到最高数字?

可能重复:
如何在BASH中对数组进行排序

我在数组中有数字10 30 44 44 69 12 11....如何从数组中显示最高?

echo $NUM //result 69
Run Code Online (Sandbox Code Playgroud)

bash

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

如何对字符串中的字符进行排序?

我想在字符串中对字符进行排序.

例如

echo cba | sort-command
abc
Run Code Online (Sandbox Code Playgroud)

是否有一个允许我这样做的命令,或者我是否必须编写一个awk脚本来迭代字符串并对其进行排序?

unix sorting command-line

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

按顺序遍历文件名列表,以便在bash中创建

解析输出ls以遍历文件列表是不好的.那么我应该如何按照它们首次创建的顺序迭代文件列表?我在这里浏览了几个问题,他们似乎都解析了ls.

嵌入式链接表明:

如果你想要一些只能ls做的特定排序,例如排序,事情变得更加困难mtime.如果您想要目录中最旧或最新的文件,请不要使用ls -t | head -1- 请参阅Bash FAQ 99.如果您确实需要mtime按顺序列出目录中的所有文件,以便按顺序处理它们,请切换到perl,并让perl程序执行自己的目录打开和排序.然后在perl程序中进行处理,或者 - 最坏的情况 - 让perl程序用NUL分隔符吐出文件名.

更好的是,将修改时间放在YYYYMMDD格式的文件名中,这样glob顺序也是mtime顺序.然后你不需要ls或perl或任何东西.(人们想要目录中最旧或最新文件的绝大多数情况都可以通过这样做来解决.)

这是否意味着没有本地方式可以做到这一点bash?我没有权限修改文件名以包含时间.我需要安排一个cron每5分钟运行一次的脚本,生成一个数组,其中包含按创建时间排序的特定目录中的所有文件,并对文件名执行一些操作并将它们移动到另一个位置.

以下工作但只是因为我没有有趣的文件名.这些文件是由服务器创建的,因此它永远不会有特殊字符,空格,换行符等.

files=( $(ls -1tr) ) 
Run Code Online (Sandbox Code Playgroud)

我可以编写一个perl可以满足我需要的脚本,但如果有人可以提出正确的方法,我会很感激bash.便携式选项会很棒,但使用最新GNU实用程序的解决方案也不会成为问题.

bash

16
推荐指数
2
解决办法
5012
查看次数

在shell脚本中排序

我有一个阵列

arr=( x11 y12 x21 y22 x31 y32)
Run Code Online (Sandbox Code Playgroud)

我需要将此数组排序为

x11 x21 x31 y12 y22 y32
Run Code Online (Sandbox Code Playgroud)

所以,我需要按字母和数字排序

我如何在shell脚本中执行此操作?

如果我使用[ $i -le $j ],它会说"预期的整数表达式".

字符串也可能包含其他字符:x.1.11.x.1.

我该怎么做呢 ?

arrays sorting shell csh

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

使用bash,如何遍历目录中的所有文件,按创建日期排序,但某些文件名的名称中包含空格

首先我有

for file in `ls -t dir` ; do
  #blah
done
Run Code Online (Sandbox Code Playgroud)

但是带空格的文件被分成两个迭代.

我已经找到了很多修复空间问题的变种,但随后在$file变量中留下了一些日期信息.

编辑:显示一个这样的变化:

for file in `find . -printf "%T@ %Tc %p\n" | sort -n` ; do
  #blah
done
Run Code Online (Sandbox Code Playgroud)

这个问题是所有时间信息仍然在$file循环中的变量内.(另外,这不起作用,因为我碰巧在OSX上,其实用find程序缺少-printf选项......)

unix bash filenames loops

9
推荐指数
1
解决办法
4956
查看次数

如何在 linux bash shell 中对字符串数组进行排序?

例如,数组是

link2_pathname
link1_pathname
link3_pathname
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到像下面这样的数组。

link1_pathname
link2_pathname
link3_pathname
Run Code Online (Sandbox Code Playgroud)

预先非常感谢!

linux bash shell

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

对混合数据数组进行排序

假设我有一个这样的数据数组:

arr[0] = "someText1 (x,y,z) a"
arr[1] = "someText2 (x,y,z) b"
Run Code Online (Sandbox Code Playgroud)

如何使用Bash按字典顺序排列此数组[仅考虑文本]?

arrays bash

2
推荐指数
1
解决办法
609
查看次数