文字列に改行文字があることを確認している場合は、それを削除する方法

文字列に改行文字があることを確認している場合は、それを削除する方法

私が制御できないいくつかの操作の結果である文字列があります。を使用してこの変数を印刷すると、次のecho結果が得られます。

echo $myvar
hello

しかし、私がするとき

if [ $myvar = "hello" ]; then
    echo they are equal
else
    echo they are not equal
fi

私はいつも彼らが等しくないと感じます。性格のせいだと思いますnewline

文字列も奇妙に動作します。私がするとき:

newVAR="this is my var twice: "$myvar$myvar
echo $newVAR

私は得る:

hellois my var twice: hello

これが実際にaとによるものかどうかを確認するにはどうすればよいですかnewline?では、削除する必要がありますか?

ベストアンサー1

問題は、キャリッジリターン(CR、\r)が含まれていることです。これにより、端末テキスト挿入ポイントが印刷中の行の先頭に戻ります。これが、例の行の先頭に「hello」が表示される理由です。$newVARこれはsed -n l、印刷できない文字(および行末)を表示する読み取り可能なビューです。

var=ab$'\r'c ; echo "$var";  printf %s "$var" | sed -n l
# output:
cb
ab\rc$

単純なbash条件付きチェックでテストできます。

[[ $var == *$'\r'* ]] && echo yes || echo no
# output:
yes

\r以下を使用してテストを実行および削除して、テストと修正を単一のステップにまとめることができます。

fix="${var//$'\r'/}"; echo "$var"; echo "$fix"
# output:
cb
abc

これ固定する使用シェルパラメータ拡張。上記で使用した特定の形式は、指定したパターンに基づいて部分文字列を置き換えるために使用されます。${parameter/pattern/string}<-- これは最初に見つかったものだけを置き換えます。模様そしてひも*parameterという変数にあります。変えるみんなモードでは、最初の項目///

おすすめ記事