2011-09-07 3 views
13

「cat test.file」を使用すると、どのようにファイルから読むときにバックスラッシュを維持するには?

printf "This is a test log %d \n, testid"; 
1 
    2 

が表示されます。bashファイルを使用すると、

IFS="" 
while read data 
do 
    echo "$data" 
done << test.file 

printf "This is a test log %d n, testid"; 
1 
    2 

行った。

"\"とスペースを同時に使用できる方法はありますか?

+2

私は '

+1

'インフォbash'、 "読み" commmandの検索あなたが意味を考えます: "バックスラッシュ文字 '\'を使用して、次の文字読み取りと行継続のための特別な意味を削除できます。 –

答えて

24

read -rを試してみてください。 manページから

:このオプションが指定された場合

-r
、バックスラッシュはエスケープ 文字としては機能しません。 バックスラッシュは、行の一部と見なされます。特に、 バックスラッシュ改行 ペアを行継続として使用することはできません。

それをテストするためにこれを実行します。

read -r a < <(echo "test \n test"); echo $a 
0
data="$(cat < test.file)" 
for line in $data 
do 
echo "$line" 
done 
+2

簡略化: 'data =" $(cat test.file) "'または 'data =" $(

+2

あなたはそうしていません。ファイル全体を '$ data'にスローする必要があります。 'for line in $(

+0

bashがセパレータとして解釈しないようにするには、IFSを使用する必要があります。 – jedwards

0
#!/bin/bash 

# Store the original IFS 
OIFS="$IFS" 
# Update the IFS to only include newline 
IFS=$'\n' 
# Do what you gotta do... 
for line in $(<test.file) ; do 
    echo "$line" 
done 
# Reset IFS 
IFS="$OIFS" 

関連する問題