私が制御できないいくつかの操作の結果である文字列があります。を使用してこの変数を印刷すると、次の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という変数にあります。変えるみんなモードでは、最初の項目/
を//
。