Linux

使用帶有讀取命令的 for 循環

  • August 13, 2020
#!/bin/bash
echo -n "Enter a number >"
read number
for var in $number
do
 read number
 echo $var
done
echo "Go!"

我希望 8-1 中的數字垂直列印並在最後說去。當我只執行程式碼 8 和 Go!列印出來。

使用seq

#!/bin/bash
echo -n "Enter a number > "
read number
seq "$number" -1 1
echo "Go!"

輸出:

Enter a number > 8
8
7
6
5
4
3
2
1
Go!

為了稍微改進您的程式碼,您可以將提示輸出到stderr

>&2 echo -n "Enter a number > "

或使用以下-p選項read

read -p 'enter a number > ' number

您的程式碼無法按預期工作的原因是

  1. 讀取循環中每次迭代的數字,以及
  2. 永遠不要在循環中遞減/遞增數字while,或者
  3. for永遠不要為循環迭代創建正確的範圍。

zsh中,您可以使用

read '?Enter a number > '
printf '%s\n' {1..$REPLY} 'Go!'

這從使用者讀取REPLY數據,然後在創建數字列表的大括號擴展中使用該數據(如果使用者輸入了有效數字)。在列表的末尾,我們添加字元串Go!,然後使用換行符列印所有這些字元串作為分隔符printf

引用自:https://unix.stackexchange.com/questions/584694