shell 问题求助

2022-12-23 16:26:11 +08:00
 WhatMelon

在 /home/tmp 下 ls 结果如下

-rw-r--r--. 1 root root 0 12 月 23 15:50 core.1
-rw-r--r--. 1 root root 0 12 月 23 15:50 core.2

在脚本中我通过

core_files=`ls -l  /home/tmp/core*'

怎么统计 core_files 这个变量的数量呢

最后我是通过

nums=`ls -l /home/tmp/core* | wc -l `

获取数量的,但是感觉有点 low,有没有优雅的方法呢

2076 次点击
所在节点    程序员
11 条回复
perfectlife
2022-12-23 16:29:21 +08:00
“怎么统计 core_files 这个变量的数量呢” 这个描述怪怪的
pheyx
2022-12-23 16:34:16 +08:00
set -- /home/tmp/core*
echo $#
daimubai
2022-12-23 16:41:10 +08:00
ll | grep -E 'core*' | wc -l
xingheng
2022-12-23 16:49:39 +08:00
脚本里面尽量不要用 ls ,用 find 替代
cpstar
2022-12-23 16:56:02 +08:00
何来优雅,就算拿一坨屎堆出来,只要管用,就行
zhanglintc
2022-12-23 17:00:10 +08:00
> `nums=`ls -l /home/tmp/core* | wc -l `

这个就是很合理的方式呀,一般都这么用。
顶多就是改善一下删选 core 的方式,比如 3 楼提到的用 grep 来筛选一下。
ripperdev
2022-12-23 17:49:08 +08:00
```bash
#!/bin/bash

shs=`find ./core*`
echo ${shs[@]}
echo ${shs} | awk '{print NF}'
```
试试这个?
wxf666
2022-12-23 19:42:10 +08:00
这种 `shs=(`find ./core* `)` 方式,文件名有空格就出错了。。
geelaw
2022-12-23 20:05:27 +08:00
正确的做法是

core_files=( ~(N)/home/tmp/core* )
echo ${#core_files[@]}

用 ls 之后计算行数的错误在于文件名可以包含 \n
neroxps
2022-12-24 08:52:07 +08:00
优雅的方式我怕你一周后回来看这个代码你不知道你自己写的什么。
sngxx
2022-12-28 17:18:15 +08:00
@xingheng 为啥捏

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/904326

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX