gun*_*uns 31
$#扩展将告诉您变量/数组中的元素数量.如果你正在使用大于2.05左右的bash版本,你可以:
VAR='some string with words'
VAR=( $VAR )
echo ${#VAR[@]}
Run Code Online (Sandbox Code Playgroud)
这有效地将字符串沿着空格(默认分隔符)拆分为数组,然后计算数组的成员.
编辑:
当然,这会将变量重新整理为数组.如果您不想这样,请使用其他变量名称或将变量重新转换回字符串:
VAR="${VAR[*]}"
Run Code Online (Sandbox Code Playgroud)
Jo *_* So 30
我无法理解为什么人们一直在使用那些过于复杂的基础知识.几乎总是一个直接的,无基础的解决方案.
howmany() { echo $#; }
myvar="I am your var"
howmany $myvar
Run Code Online (Sandbox Code Playgroud)
这使用内置于shell的tokenizer,因此没有差异.
这是一个相关的问题:
myvar='*'
echo $myvar
echo "$myvar"
set -f
echo $myvar
echo "$myvar"
Run Code Online (Sandbox Code Playgroud)
请注意,使用bash数组的@guns解决方案具有相同的问题.
以下是一个(据称)超级健壮的版本来解决问题:
howmany() ( set -f; set -- $1; echo $# )
Run Code Online (Sandbox Code Playgroud)
如果我们想避免子shell,事情开始变得丑陋
howmany() {
case $- in *f*) set -- $1;; *) set -f; set -- $1; set +f;; esac
echo $#
}
Run Code Online (Sandbox Code Playgroud)
这两个必须与引号一起使用,例如howmany "one two three"返回3
Myk*_*yev 10
set VAR='hello world'
echo $VAR | wc -w
Run Code Online (Sandbox Code Playgroud)
这是你如何检查.
if [ `echo $VAR | wc -w` -gt 1 ]
then
echo "Hello"
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30991 次 |
| 最近记录: |