【问题标题】:Parsing Strings in Bash w/out a Delimiter在没有分隔符的情况下在 Bash 中解析字符串
【发布时间】:2014-02-21 08:03:25
【问题描述】:

我有一段脚本要弄清楚,所以对于更有经验的人来说,这可能是一个简单的问题。

代码如下:

#!/bin/bash
echo "obase=2;$1" | bc

像这样使用:

$./script 12

输出:

1100

我的问题是,如何将这个 4 位数字解析为单独的数字? (然后用 cut -d ' ' 分隔并将它们输入到数组中......)

我希望能够得到以下输出:

1 1 0 0 

这在 BASH 中是否可行?我知道使用其他语言更容易。

【问题讨论】:

    标签: bash parsing bc


    【解决方案1】:

    可以使用sed

    echo "obase=2;$1" | bc | sed 's/./& /g'
    

    或者如果您喜欢更长的形式:

    echo "obase=2;$1" | bc | sed 's/\(.\)/\1 /g'
    

    如果您的sed 支持-r

    echo "obase=2;$1" | bc | sed -r 's/(.)/\1 /g'
    

    【讨论】:

    • 哇老兄;好的。我什至遇到过这种 sed 语法,但没有意识到这是答案。谢谢。
    【解决方案2】:

    要打印字符串中的单个数字,您可以使用fold

    s=1100
    fold -w1 <<< "$s"
    1
    1
    0
    0
    

    创建数组:

    arr=( $(fold -w1 <<< "$s") )
    
    set|grep arr
    arr=([0]="1" [1]="1" [2]="0" [3]="0")
    

    【讨论】:

    • 我从没听说过 fold;我必须检查一下。谢谢!
    • 您的数组语法对用户来说更容易完成我所需要的。我正在努力更好地学习这些,arr 非常方便。
    • 是的,毫无疑问,使用这样的数组是更简洁的语法。
    • 你能帮我理解 set|grep arr 是如何调用该数组的值的吗?
    • set|grep arr 只是为了显示数组的内容。你可以在shell中调用set来打印所有变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2019-05-03
    • 1970-01-01
    • 2018-03-21
    相关资源
    最近更新 更多