linux - 我怎样才能从 shell 脚本获得各种输出?

标签 linux shell sh

我不确定如何表达它(我有过忘记一切的时刻之一),但我想创建一个脚本,它为我提供每个可能由字符组成的单词。

例如,如果我想要各种“空格”,我可以输入 (s|S)/(p|P)/(A|a|4)/(C|c)/(e |3|E|ε)/(s|S|5|$) 到脚本中,作为返回得到如下输出:

...
sP4C3s
SpaCe5
spACεS
Sp4C3$
...

等等,等等。我该如何创建它?

(顺便搜索了一下,但找不到任何有用的东西。可能是我措辞错误。)

最佳答案

您将使用 brace expansion在 bash 中:

echo {s,S}{p,P}{a,A}{c,C}{e,E}{s,S}

spaces spaceS spacEs spacES spaCes spaCeS spaCEs spaCES spAces spAceS spAcEs spAcES spACes spACeS spACEs spACES sPaces sPaceS sPacEs sPacES sPaCes sPaCeS sPaCEs sPaCES sPAces sPAceS sPAcEs sPAcES sPACes sPACeS sPACEs sPACES Spaces SpaceS SpacEs SpacES SpaCes SpaCeS SpaCEs SpaCES SpAces SpAceS SpAcEs SpAcES SpACes SpACeS SpACEs SpACES SPaces SPaceS SPacEs SPacES SPaCes SPaCeS SPaCEs SPaCES SPAces SPAceS SPAcEs SPAcES SPACes SPACeS SPACEs SPACES

如果你想用换行符分隔的话,使用

printf "%s\n" {s,S}{p,P}{a,A}{c,C}{e,E}{s,S}

要使其可重用,请将其放入一个函数中。但是,由于大括号扩展是 shell 执行的第一个扩展,因此如果不使用 eval 就不能在其中使用变量:

casecombinations() {
    local source brace_expr i char
    for source in "$@"; do
        brace_expr=""
        for ((i=0; i<"${#source}"; i++)); do
            char="${source:i:1}"
            case $char in
                [[:alpha:]]) brace_expr+="{${char,},${char^}}";;
                *) brace_expr+="\\$char";;
            esac
        done
        eval echo "$brace_expr"
    done
}
casecombinations hello world

关于linux - 我怎样才能从 shell 脚本获得各种输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45565313/

相关文章:

用户空间中的 Linux 中断处理

linux - 如何在 Netezza 中使用 nzsql

php - Exec() 为FFMPEG创建两个不同的进程

linux - 如何获得下一个工作日的编号

python - pytest 与另一个版本的 python 一起运行

Linux Kernel out of tree Driver Compilation failed with BUILD_BUG_ON_ZERO

python - 如何使用 bash 脚本重新启动在屏幕内运行的 python 脚本?

shell - 如何在unix shell脚本中获取td标签之间的数据

ios - Facebook iOS SDK - 如何为 Xcode 4.3 构建静态库?

linux - 为什么这个shell脚本不运行?