Shell-Script

破折號中的範圍如何工作?

  • March 12, 2019

我試圖弄清楚如何在破折號中匆忙下面的 bash 腳本。

for x in {1..5}
do
   for y in {a..c}
   do
   echo $HOME$x$y
   done
done

Dash 不支持大括號擴展,我不知道有任何其他方法可以獲取類似範圍的構造以模仿上面的腳本。我想我可以通過一個while循環來解決,但我不認為這是一個腳本改編,而是一個完全不同的野獸。

是否可以在 Dash 中保留上述腳本的精神?是否可以在不使用 seq 等外部程序的情況下保持上述腳本的精神?如何?

POSIX 本身沒有定義大括號擴展,您需要使用其他 POSIX 投訴工具中的選項進行轉換。一種這樣的方法是使用 ASCII 表來映射從字元的 ASCII 值到它們的字元值的轉換,使用printf(). 查找man ascii值映射。

i=1
asciiStart=97
asciiEnd=99
while [ "$i" -le 5 ]
do
   while [ "$asciiStart" -le "$asciiEnd" ]
   do
       echo "$HOME$i$(printf "\\$(printf '%03o' "$asciiStart")")"
       asciiStart=$((asciiStart + 1))
   done
   asciiStart=97
   i=$(( i + 1 )) 
done

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