文字列内の新しい行の数を見つけて、この数をループのwhile
制限として使用したいと思います。
以下を使用して行数を参照して書き込むことができます。
echo "$MY_STRING" | grep -c '$'
行数を整数に設定し、これをwhileループで使用するには、次のようにします。
MYNUM="$MY_PEERS" | grep -c '$'
ただし、この行はすぐに端末にゼロを書き込みます。これは私の文字列の行数ではありません。また、MYNUM
ループを実行できませんwhile
。 (私が$MYNUM
使用しているものwhile
)ループで制限として使用できるように行数をどのように取得しますかwhile
?
答え1
完全には理解していませんが、なぜあなたはこれが必要であり、これがそれを完了する1つの方法です。重要なのは、$( )
出力をキャプチャして変数に割り当てることです。
パスワード:
#!/usr/bin/env bash
IFS='' read -r -d '' TEST_STR <<-'EOF'
Test text
quick brown fox
lazy dog
EOF
NEW_LINE_COUNT=$(echo "$TEST_STR" | wc -l)
echo "$TEST_STR"
echo "$NEW_LINE_COUNT"
結果:
Test text
quick brown fox
lazy dog
4
答え2
個々のデバイスを表示するために複数行の文字列の行数を数える必要はありません。ここでは、配列変数で使用されるループをfor
次のように使用できます。
IFS=$'\n' read -d '' -r -a Multi_Line_Str <<STR
$(printf '%s\n' 'device_'{A..E})
STR
for device in "${Multi_Line_Str[@]}"
do
echo "<$device>"
done
答え3
複数行の文字列がある場合は、wc -l
それを使用して行数を簡単に計算できます。
printf '%s' "$string" | wc -l
その数値を変数に保存します。
nlines=$( printf '%s' "$string" | wc -l )
ただし、whileループを実行するためにこの数字は必要ありません。
printf '%s' "$string" |
while read -r line; do
# do something with "$line"
done
各行で実行する操作によっては、whileループがまったく必要ない場合があります。
printf '%s' "$string" | awk '<some awk script>'
データの生成方法によっては、データを複数行変数にまったく格納する必要がない場合があります。
some_command | some_line_by_line_processing
ここでは、some_command
whileループ、サブシェルのコマンドバー((...)
)、または出力を生成する単純なコマンド、または)、またはループまたは出力を処理する必要がある他のすべてです。パイプラインの最初の部分を1行ずつ表示します。some_line_by_line_processing
awk