Bash Scripting:逃避明星角色

时间:2014-12-26 00:17:27

标签: bash shell unix console sh

我有一些代码(Bash Script .sh)可以生成不同的字符组合。

当变量" chars"包含" \" (*),然后生成带斜杠和星号的字符串。但是当我删除星号前面的斜线时,会抛出一串文件名。

有没有人知道如何用星星生成正确的字符串?

min_length="1"
max_length="2"
chars="\` ~ ! @ # $ % ^ & \* ( ) - _ = + [ { ] } \ | ; : ' \" , < . > / ?"

generateCombinationsOfString() {

    for c in $chars; do

        nc=$[$nc+1]
        ch[$nc]=$c
    done

    for x in `seq 1 $[$max_length+1]`; do

        if [ $min_length -ge $x ]; then
            ci[$x]=1
        else
            ci[$x]=0
        fi
    done

    for clen in `seq $min_length $max_length`; do

            while [ ${ci[$[$clen+1]]} -ne 1 ]; do
                    wrd=""

                    for x in `seq $clen -1 1`; do
                        wrd=$wrd${ch[${ci[$x]}]}
                    done

                    echo "${wrd}"

                    ci[1]=$[${ci[1]}+1]

                    for x in `seq 1 $clen`; do

                            if [ ${ci[$x]} -gt $nc ]; then
                                ci[$x]=1
                                ci[$[$x+1]]=$[${ci[$[$x+1]]}+1]
                            fi
                    done
            done
    done
}

generateCombinationsOfString

1 个答案:

答案 0 :(得分:3)

问题出现在以下循环中

for c in $chars ; do

比照

chars='1 2 * 3'
for c in $chars ; do
    echo "$c"
done

路径名扩展在变量扩展后发生。

要防止它,请使用数组:

#! /bin/bash
chars=(1 2 \* 3)
for c in "${chars[@]}" ; do
    echo "$c"
done