49

私はシェルスクリプトが初めてです。コマンドを使用して、Windows で作成され、キャリッジ リターンを持つファイルを取得していますsource。ソースにいくつかの文字を追加すると、常に行頭になります。

test.dat(最後にキャリッジリターンがあります):

testVar=value123

testScript.sh(ファイルの上のソース):

source test.dat
echo $testVar got it

私が得る出力は

got it23

'\r'変数からを削除するにはどうすればよいですか?

4

6 に答える 6

86

さらに別のソリューションを使用しますtr

echo $testVar | tr -d '\r'
cat myscript | tr -d '\r'

オプション-dは の略ですdelete

于 2013-03-20T10:42:32.443 に答える
31

sed は次のように使用できます。

MY_NEW_VAR=$(echo $testVar | sed -e 's/\r//g')
echo ${MY_NEW_VAR} got it

ところで、dos2unixデータ ファイルに対して a を実行してみてください。

于 2013-03-20T10:06:12.370 に答える
17

ソース ファイルはキャリッジ リターンで行が終了しているため、の内容は次の$testVarようになります。

$ printf '%q\n' "$testVar"
$'value123\r'

(1 行$目はシェル プロンプトです。2 行目$%q書式設定文字列からのもので、$''引用を示しています。)

キャリッジ リターンを取り除くには、シェル パラメーター展開ANSI-C 引用符を使用できます(Bash が必要です)。

testVar=${testVar//$'\r'}

結果として生じるべきもの

$ printf '%q\n' "$testVar"
value123
于 2018-08-03T14:39:29.200 に答える
8

Linux/Unix にコピーした後、スクリプト ファイルでこのコマンドを使用します。

perl -pi -e 's/\r//' scriptfilename
于 2013-03-20T10:01:22.650 に答える
6

にパイプして、各テキスト行からsed -e 's/[\r\n]//g'キャリッジ リターン ( \r) とライン フィード ( )の両方を削除します。\n

于 2016-08-29T13:21:48.643 に答える