linux shell 命令定义和使用数组出错

linux shell 命令定义和使用数组出错,第1张

实际上,bash中可以直接对数组赋值的,不需要使用declare。而且取长度的用法${#var}也只能是在bash中。

这些都不是符合POSIX标准的用法,而是bash所特有的。所以,要简单点的话,就将声明改为bash,即 #!/bin/bash。

当然,还有两处小错,要仔细点:

var =(1 2 3 3 5)#赋值时等号两边不能有空格

echo "${#var}#引号不成对啊,这里也可以不要引号的

命令后面的分号其实也是多余的,只要换行了,分号就不需要(当然加了也没错)

注意,命令引起来的是tab键上面那个,而不是单引号

解释:

md5sum a.txt的结果例如是

3a5cacda937fbe71fcb72cfe4904dee8 a.txt

前面是MD5值,a.txt是你指定的文件名,我们要取前面那部分,有2个方法:

方法一,也就是xiehuahere的回答:

a[1]=`md5sum a.txt | cut -d' ' -f1`

其中cut的-d,是指定空格为分隔符,-f1是指定取分隔后的第一个字串,就是我们要的MD5值了。

方法二:

md5sum a.txt | awk -F ' ' '{print $1}'

awk的-F ' ',是指定空格为分隔符,是指定空格为分隔符,是指定取分隔后的第一个字串,也是我们要的MD5值。

赋值除了使用“`”反引号,还可以这样,例:

a[1]=$(md5sum a.txt | cut -d' ' -f1)

a[1]=$(md5sum a.txt | awk -F ' ' '{print $1}')

如果是bash,可以用数组,比如下面的循环,对每一个关键字 (赵钱孙里)处理一次

declare -A data

for key in zhao qian sun li zhao sundo

if [ -z "${data[$key]}" ]then

data[$key]=1

else

let data[$key]++

fi

done

for key in ${!data[@]}do

echo "$key occured ${data[$key]} times"

done


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11574849.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存