我遇到了在bash脚本中声明数组中所有可打印字符的问题。我想通过循环显示所有可打印的字符4次。
实施例
array=( a b c d … z A B C … Z 1 2 3 … 0 ! @ # $ % ^ & * ( ) _ +)
For chr1 in ${array[@]}
Do
For chr2 in ${array[@]}
Do
Echo $chr1$chr2
Done
Done
我已经能够使用$ {array [space of space]}来打印空格字符,但我仍然无法打印*字符。由于某种原因,它倾向于打印文件列表。
知道如何才能让它发挥作用吗?
答案 0 :(得分:4)
行情!更多报价!</ p>
array=( a b c d z A B C Z 1 2 3 0 '!' '@' '#' '$' '%' '^' '&' '*' '(' ')' '_' '+')
for chr1 in "${array[@]}"
do
for chr2 in "${array[@]}"
do
echo "$chr1$chr2"
done
done
在数组声明中的特殊字符周围引用,并在循环中的变量访问周围使用双引号。
答案 1 :(得分:3)
在shell脚本中,引用是你的朋友。总是
array=(a b c d e f g h i j k l m z A B C Z 1 2 3 0 \! \@ \# \$ \% \^ \& \* \( \) _ +)
for chr1 in "${array[@]}"; do
for chr2 in "${array[@]}"; do
echo "$chr1$chr2"
done
done
在这里工作正常。
答案 2 :(得分:1)
chr () { printf "\\$(($1/64*100+$1%64/8*10+$1%8))"; }
ord () { printf '%s' "$(( ( 256 + $(printf '%d' "'$1"))%256 ))"; }
for i in {32..126}
do
for j in {32..126}
do
chr $i; chr $j
echo
done
done
答案 3 :(得分:0)
*
是bash的特殊字符。
外卡[星号]。 *字符用作globbing中文件名扩展的“通配符”。它本身就匹配给定目录中的每个文件名。
从绝对的bash脚本指南[1]中,你会像第一个答案那样逃避它。