我有一些代码(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
答案 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