forループを使用して新しい行を見つける方法は?

forループを使用して新しい行を見つける方法は?

Webのさまざまな場所で次のものを見つけました。

\015 
\012
\x0a - hex
\n
\r

さまざまな改行/キャリッジリターン文字の同義語ですべて...

ただし、この小さなスクリプトでは改行文字に会うと認識できません。誰かがif行で確認する必要があることを教えてもらえますか?

#!/bin/bash

test="this is a
test"

for a in "$test"; do

        if [[ "$a" == '\012' ]] ; then
                echo "FOUND NEWLINE"
        fi

echo "$a"

done

ベストアンサー1

forループのすぐ下で文字列を使用すると、各単語に対して機能します(ここでは一つ単語:引用符の後のすべて$test)、各文字ではありません。whileループを使用してread文字ごとに解析するか、文字列を繰り返すことができる数値パラメータを導入する必要があります。

また、使用するときは、改行とスペースが区切り文字として解釈されず、一度に1文字ずつ強制read的に読み取られることを確認する必要があります。read

作業バージョンは次のとおりです。

#!/bin/bash

test="this is a
test"

printf %s "$test" | while IFS= read -r -N 1 a; do

        if [[ "$a" == $'\n' ]] ; then
                echo "FOUND NEWLINE"
        fi

printf %s "$a"

done

どちらも同じ改行コードを表すため、または$'\n'に置き換えることができます。しかし、これはorとは異なります。つまり、$'\012'$'\x0a'\015\r入力する(行の先頭に戻ります)。 Linux システムでは改行文字が を使用して表示されますが、\nWindows では一連の代替文字で表されます\r\n。そのため、Windowsにテキストファイルがある場合は、そのファイルを検索することもできます\r

おすすめ記事