2011-09-07 16 views
13

जब मैं "बिल्ली test.file" उपयोग करें, यहफ़ाइल से पढ़ने पर बैकस्लैश कैसे रखें?

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

दिखाएगा मैं बैश फ़ाइल का उपयोग करते हैं,

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 का उपयोग करने का प्रयास करें।

आदमी पृष्ठ से:

-r
यदि यह विकल्प दिया जाता है, बैकस्लैश बचने चरित्र के रूप में कार्य नहीं करता है। बैकस्लैश को लाइन का हिस्सा माना जाता है। विशेष रूप से, बैकस्लैश-न्यूलाइन जोड़ी को लाइन निरंतरता के रूप में उपयोग नहीं किया जा सकता है।

निष्पादित यह परीक्षण करने के लिए:

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

सरल: 'डेटा = "$ (बिल्ली परीक्षण.फाइल)" 'या' डेटा = "$ (

+2

आप नहीं करते पूरी फ़ाइल को '$ डेटा' में फिसलने की आवश्यकता है। $ ($ test.file) में लाइन के लिए; echo "$ line" करें; किया गया –

+0

बैश को अलग करने वालों के रूप में व्याख्या करने से रोकने के लिए आपको अभी भी आईएफएस के साथ खेलने की आवश्यकता होगी। – 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" 

सुंदर ज्यादा आप आईएफएस प्लस कीथ थॉम्पसन के सुझाव के साथ अध्यक्षता कर रहे थे जहां।

संबंधित मुद्दे