最大長が8文字の単語に行を分割します。

最大長が8文字の単語に行を分割します。

FMラジオ局名に曲名を2回表示するスクリプトを作成しています。ラジオ局の名前は8文字に制限されています。次の行があるとしましょう。Best Direction - I feel good

コードは次のとおりです。 (「PS」はラインソフトウェアの始まりです。名前を変更するコマンドであることに注意してください)

echo "PS Best" > $fifo;
sleep 1;
echo "PS Directio" > $fifo;
sleep 1;
echo "PS n - I" > $fifo;
sleep 1;
echo "PS feel" > $fifo;
sleep 1;
echo "PS good" > $fifo;
sleep 1;
//repeat this one more time

Bashスクリプトでこれを行うにはどうすればよいですか?わかりません。

答え1

foldフォローGNUコアユーティリティ:

a="Best Direction - I feel good"
fold -s -w 8 <<< "$a" | while read -r line; do 
  echo "PS $line" > "$fifo"
 sleep 1
done

$fifoに出力:

最高のPS
PS方向
nnJC
PS感
良いPS

fold$ fifoと同じ出力がありません。

a="Best Direction - I feel good"
while [[ -n $a ]]; do     # loop until $a is empty
  if [[ ${#a} -gt 8 ]]; then
    b="${a:0:8}"          # get first 8 characters of $a
    c="${b% *}"           # crop all from right incl. first whitespace
  else
    c="$a"
  fi
  echo "PS $c" > "$fifo"
  d="${a#$c}"             # crop $c left from string $a
  a="${d# *}"             # remove a leading whitespace
  sleep 1
done

関連情報