在 /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,有没有优雅的方法呢
不好意思,描述不是很清楚,我再来一遍吧 在/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 -rwxr-xr-x. 1 root root 49 12月 23 17:27 test.sh
test.sh 内容如下
#!/bin/bash shs=`find ./core* ` echo ${shs[@]}
bash test.sh 得到结果如下
./core.1 ./core.2
现在是想在脚本里获取到shs这个数组的长度(2) 之前是通过ls -l /home/tmp/core* | wc -l取到的 有什么不需要遍历的方法吗
同事帮忙解决了 修改后的脚本如下
#!/bin/bash shs=(`find ./core* `) echo ${#shs[@]}
![]() | 1 perfectlife 2022-12-23 16:29:21 +08:00 “怎么统计 core_files 这个变量的数量呢” 这个描述怪怪的 |
2 pheyx 2022-12-23 16:34:16 +08:00 set -- /home/tmp/core* echo $# |
3 daimubai 2022-12-23 16:41:10 +08:00 ll | grep -E 'core*' | wc -l |
![]() | 4 xingheng 2022-12-23 16:49:39 +08:00 ![]() 脚本里面尽量不要用 ls ,用 find 替代 |
![]() | 5 cpstar 2022-12-23 16:56:02 +08:00 何来优雅,就算拿一坨屎堆出来,只要管用,就行 |
6 zhanglintc 2022-12-23 17:00:10 +08:00 > `nums=`ls -l /home/tmp/core* | wc -l ` 这个就是很合理的方式呀,一般都这么用。 顶多就是改善一下删选 core 的方式,比如 3 楼提到的用 grep 来筛选一下。 |
![]() | 7 ripperdev 2022-12-23 17:49:08 +08:00 ```bash #!/bin/bash shs=`find ./core*` echo ${shs[@]} echo ${shs} | awk '{print NF}' ``` 试试这个? |
8 wxf666 2022-12-23 19:42:10 +08:00 这种 `shs=(`find ./core* `)` 方式,文件名有空格就出错了。。 |
![]() | 9 geelaw 2022-12-23 20:05:27 +08:00 via iPhone 正确的做法是 core_files=( ~(N)/home/tmp/core* ) echo ${#core_files[@]} 用 ls 之后计算行数的错误在于文件名可以包含 \n |
![]() | 10 neroxps 2022-12-24 08:52:07 +08:00 优雅的方式我怕你一周后回来看这个代码你不知道你自己写的什么。 |