2017-08-24 75 views
0

我有這個文件:爲什麼bash中忽略了結束雙引號(「)

http://www.beta.inegi.org.mx/contenidos/proyectos/enchogares/especiales/endireh/2016/tabulados/I_Cuestionario_general_estimaciones_endireh2016.xlsx 
http://www.beta.inegi.org.mx/contenidos/proyectos/enchogares/especiales/endireh/2016/tabulados/IV_Ingresos_y_recursos_estimaciones_endireh2016.xlsx 
http://www.beta.inegi.org.mx/contenidos/proyectos/enchogares/especiales/endireh/2016/tabulados/VI_ambito_escolar_estimaciones_endireh2016.xlsx 
http://www.beta.inegi.org.mx/contenidos/proyectos/enchogares/especiales/endireh/2016/tabulados/VII_ambito_laboral_estimaciones_endireh2016.xlsx 
http://www.beta.inegi.org.mx/contenidos/proyectos/enchogares/especiales/endireh/2016/tabulados/VIII_ambito_comunitario_estimaciones_endireh2016.xlsx 
http://www.beta.inegi.org.mx/contenidos/proyectos/enchogares/especiales/endireh/2016/tabulados/IX_Atencion_Obstetrica_estimaciones_endireh2016.xlsx 
http://www.beta.inegi.org.mx/contenidos/proyectos/enchogares/especiales/endireh/2016/tabulados/X_ambito_familiar_estimaciones_endireh2016.xlsx 

而這個bash腳本:

while read p; do 
     echo "\"$p\"" 
done < file.txt 

我希望同樣的文件,但與周圍的每個雙引號線,但是這是bash的是輸出:

"http://www.beta.inegi.org.mx/contenidos/proyectos/enchogares/especiales/endireh/2016/tabulados/I_Cuestionario_general_estimaciones_endireh2016.xlsx 
"http://www.beta.inegi.org.mx/contenidos/proyectos/enchogares/especiales/endireh/2016/tabulados/IV_Ingresos_y_recursos_estimaciones_endireh2016.xlsx 
"http://www.beta.inegi.org.mx/contenidos/proyectos/enchogares/especiales/endireh/2016/tabulados/VI_ambito_escolar_estimaciones_endireh2016.xlsx 
"http://www.beta.inegi.org.mx/contenidos/proyectos/enchogares/especiales/endireh/2016/tabulados/VII_ambito_laboral_estimaciones_endireh2016.xlsx 
"http://www.beta.inegi.org.mx/contenidos/proyectos/enchogares/especiales/endireh/2016/tabulados/VIII_ambito_comunitario_estimaciones_endireh2016.xlsx 
"http://www.beta.inegi.org.mx/contenidos/proyectos/enchogares/especiales/endireh/2016/tabulados/IX_Atencion_Obstetrica_estimaciones_endireh2016.xlsx 
"http://www.beta.inegi.org.mx/contenidos/proyectos/enchogares/especiales/endireh/2016/tabulados/X_ambito_familiar_estimaciones_endireh2016.xlsx 

誰知道爲什麼bash的行爲是這樣,而如何同時輸出?雙引號? (開始和結束)

+1

它在我的機器上正常工作。你的環境是什麼,比如bash版本? – delta

+0

'GNU bash,版本4.3.48(1) - 釋放'。我開始認爲這是輸入文件和換行符字符的問題:/ – jake2389

回答

3

我靠近肯定的是,在你輸入文件的行結束CR/LF,而不是僅僅LF 。這將輸出:

  • ";
  • 的網址;
  • 一個CR將光標返回到行首;
  • ";最後,
  • 移動到一個新的行。

將輸出捕獲到文件並將其傳遞到像od -xcb這樣的轉儲實用程序,該實用程序會顯示正在輸出的原始字節。

作爲測試,產生由兩行和123<CR>456一個文件,我看到:

pax> while read p; do echo "\"$p\""; done <testfile 
"123 
"456" 

這似乎表明問題是如所描述的。

+0

謝謝,我通過xxd運行它,顯然'hex'是十六進制問題(這實際上是回車)。我很困惑,因爲當我正則表達式搜索'\ r'時,Sublime Text無法檢測到它,但我認爲它是一個錯誤:/我現在修復了它:)謝謝! – jake2389

+0

@ jake2389 Sublime Text可能只是將它視爲一個DOS/Windows格式的文本文件,使用CR/LF行結束符(我確信它就是這樣),而不是將CR視爲行的一部分純粹的unix程序通常會這樣做)。 –

0

如果您無法避開前導和尾隨雙引號,則可以在echo語句周圍使用單引號。單引號內的任何雙引號都在定義字符串字面而言沒有意義,反之亦然:

while read p; do 
     echo '"$p"' 
done < file.txt 
+1

這僅僅爲每行打印''$ p「'。 –

+0

@BenjaminW。我想這就是他想表現的。但它傳達的很糟糕。 – Anubis