我正在尝试使用ls和grep获取目录计数,并将值存储在变量中。不幸的是,我收到此错误:./test.sh: line 3: -l: command not found
这是脚本:
#!/bin/bash
assetid=ls -l /home/user/Desktop/folder | grep -c "^d"
echo $assetid
答案 0 :(得分:2)
使用循环来显式计数由模式产生的每个项目。
count=0
for f in /home/user/Desktop/folder/*/; do
count=$((count + 1))
done
如果您还需要包括隐藏目录,请使用
count=0
for f in /home/user/Desktop/folder/*/ /home/user/Desktop/folder/.*/; do
count=$((count + 1))
done
如果您不关心内存使用情况,请填写一个数组并获取结果数组的大小
dirs=( /home/user/Desktop/folder/*/ )
count=${#dirs[@]}
答案 1 :(得分:1)
有时SO格式已关闭,但您是否真的要运行命令assetid=ls -l /home/user/Desktop/folder | grep -c "^d"
?
如果是,则尝试在环境变量-l
设置为字符串assetid
的情况下运行命令ls
。您可能打算这样做
assetid=$( ls -l /home/user/Desktop/folder | grep -c "^d" )
答案 2 :(得分:1)
我想这将处理所有情况:
find . -maxdepth 1 -type d -exec echo \; | wc -l
对于每个目录,我打印一个空的换行符...然后计算换行符。遗憾的是wc
不适用于以null结尾的字符串,但是我们可以删除除零以外的所有字符并对它们进行计数:
find . -maxdepth 1 -type d -print0 | tr -cd '\0' | wc -c
关于脚本,您会遇到错误,因为如果要将输出保存到变量中,则需要在$( .. )
中加上注释。 Bash知道空间,我的意思是a=1
是角色,a = 1
是名为a
的运行程序,带有参数=
和1
。 Bash解释以下行:var=1 bash -c 'echo $var'
,因为它首先设置var=1
,然后运行带有参数bash
和-c
的程序'echo $var'
。试试这个:
assetid=$(ls -l /home/user/Desktop/folder | grep -c "^d")
但是不要解析ls
输出。 ls
用于人类可读的彩色输出,最好在批处理/管道脚本中使用不同的实用程序。