【问题标题】:How to can I count the lenght of an parameter without any spaces or numbers?如何计算没有任何空格或数字的参数的长度?
【发布时间】:2021-03-18 16:51:46
【问题描述】:

我正在尝试计算没有数字和空格的参数的占用情况,例如如果有人输入“Hello player1”,它必须回显“11 个字符”。我试过使用 ${#value} 但这会计算数字和空格。

    if [ -z "$1" ]
    then
        echo "write at least 1 word"
else
    for value in "$@" 
        do
            echo "${value//[[:digit:]]/}"
            
    done
    echo ${#value}
fi

The result of the code

正如您在图像中看到的那样,它只计算最后一个参数并计算我不想要的数字

Results of the second code

【问题讨论】:

    标签: bash


    【解决方案1】:

    分为两步。

    set -- "abc 123" "d12"
    for value do  # in "$@" is default, don't need to say it
      valueTrimmed=${value//[[:digit:][:space:]]/}
      echo "The string '$value' has ${#valueTrimmed} valid characters"
    done
    

    ...正确地作为输出发出:

    The string 'abc 123' has 3 valid characters
    The string 'd12' has 1 valid characters
    

    bash 不支持嵌套参数扩展;您不能作为内置的 shell 一步完成(可以在管道中完成,但性能成本高得不合理)。

    【讨论】:

    • 谢谢,但它只计算第二个参数而不是第一个参数
    • 我不明白你的意思。什么“第二个参数”?查看现在给出的示例输出——我们传入了两个参数(abc 123d12),它们都被处理了。
    • 如果我输入像你好用户,它只计算用户。而不是你好
    • @0stone0,回复:管道方法,尝试对 1000 或 10,000 个项目进行基准测试。与使用本机 bash 字符串操作相比,它真的很慢。
    • @kemalozdogan,我不会,也不会,并且拒绝关注代码图像的链接。请参阅 Meta Stack Overflow 上的 Why not upload images of code/errors when asking a question?。将该成绩单作为文本编辑到您的问题中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    相关资源
    最近更新 更多