A
AB
ABC
ABCD
ABCDE
read -p "Enter rows:" rows
for((i=1; i<=rows; i ))
do
for((j=1; j<=i; j ))
do
echo -n 'a'
done
echo
done
無法列印上述模式使用 for 回圈,但不知道如何列印 abcd 模式。
uj5u.com熱心網友回復:
您可以使用兩個printfs 將 ASCII 值轉換為字符:
read -p "Enter rows:" rows
for ((i=1; i<=rows; i )); do
for ((j=1; j<=i; j )); do
printf "\x$(printf %x $((64 j)))"
done
echo
done
如果你想留下來,echo -n你可以使用一個用所有字母初始化的陣列并通過索引參考它:
abc=({A..Z})
read -p "Enter rows:" rows
for ((i=1; i<=rows; i )); do
for ((j=0; j<i; j )); do
echo -n ${abc[j]}
done
echo
done
uj5u.com熱心網友回復:
for((i=1; i<=rows; i ))
do
for((j=1; j<=i; j ))
do
printf '%x' $(expr 96 $j) | xxd -p -r
done
echo
done
我已將 ascii 97-->'a' 轉換為十六進制格式,然后解碼為該字符值。
uj5u.com熱心網友回復:
bash引數擴展包括${parameter:offset:length}子字串擴展:
$ str="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
$ read -p "Enter rows:" rows
Enter rows:5
$ for (( i = 1; i <= rows; i )); do echo "${str:0:i}"; done
A
AB
ABC
ABCD
ABCDE
注意:當然,如果您輸入的值大于 26,額外的輸出行將被截斷為 26 個字符。
注意:str您可以使用以下方法計算它,而不是手動分配:
$ arr=({A..Z}); str="${arr[*]}"; str="${str// }"
$ echo "$str"
ABCDEFGHIJKLMNOPQRSTUVWXYZ
這使用大括號擴展{A..Z}來構造arr大寫字母陣列,并使用模式替換${str// }來洗掉陣列擴展中的中間空格${arr[*]}。這很方便且不易出錯。如果您想添加小寫字母和數字:
$ arr=({A..Z} {a..z} {0..9}); str="${arr[*]}"; str="${str// }"
$ echo "$str"
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/432619.html
