You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中如何不借助变量,用#运算符获取字符串字面量长度?

Bash字符串字面量长度计算问题解答

关于${#}相关语法的名称

你提到的${#parameter}中的#属于**参数扩展(Parameter Expansion)**语法的一部分,并非单独的"特殊参数"——特殊参数指的是$0、$*、$@这类预定义的系统参数,而#是参数扩展里专门用于计算参数值长度的操作符。

无需变量的字符串长度计算方法

Bash确实不支持直接在${#}中传入字符串字面量,但可以通过以下几种方式实现无变量计算:

1. 结合wc与here-string

利用wc -c统计字符数,注意减去here-string自动添加的换行符:

length=$(wc -c <<< ":/path/to/a/directory")
length=$((length - 1)) # 最终结果为21

2. 使用printf配合wc

通过printf输出字符串,再用wc -c统计:

length=$(printf "%s" ":/path/to/a/directory" | wc -c)

3. 临时修改位置参数

利用位置参数作为临时载体,计算后可恢复原参数:

# 保存原位置参数
original_args=("$@")
# 设置临时位置参数
set -- ":/path/to/a/directory"
# 获取长度
length=${#1}
# 恢复原位置参数
set -- "${original_args[@]}"

4. 借助awk的length函数

直接通过awk内置函数计算:

length=$(awk 'BEGIN{print length(":/path/to/a/directory")}')

直接使用字面量报错的原因

Bash的${#parameter}语法要求parameter必须是有效的参数(变量、位置参数、特殊参数等),字符串字面量不属于参数范畴,因此会触发"bad substitution"错误。而${#/path/to/a/directory}会被Bash解析为空命令替换,最终返回长度0。


内容的提问来源于stack exchange,提问作者Jose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 06:03:18