回答
您需要引用您的變量$res
以便保留空白。
$ cat file
a b e c d
$ res=$(cat file)
$ echo $res
a b e c d
$ echo "$res"
a b e c d
man bash
從下QUOTING
:
引用被用於去除某些字符 或詞語的特殊含義的殼。 引用可用於禁用對特殊字符的特殊處理,以防止保留字被識別,並防止參數擴展。
上面在DEFINITIONS下列出的每個元字符對shell 有特殊含義,如果要表示它自己,則必須引用它們。
... \a alert (bell) \b backspace \e \E an escape character \f form feed \n new line \r carriage return \t horizontal tab \v vertical tab \\ backslash \' single quote \" double quote \nnn the eight-bit character whose value is the octal value nnn \xHH the eight-bit character whose value is the hexadecimal value HH \cx a control-x character ...
這不是唯一的失敗的標籤,但是調用echo
命令的分配。
res
被分配一個包含製表符的值。當你在shell中編寫$res
這就相當於在那個時候輸入res
變量的內容。
所以:
$ echo $res
不一樣:
$ echo a b e c d
(其中在該行的大空間是製表符,它可以通過按Ctrl+V Tab
鍵入)。如果你運行該命令你也可以得到:
a b e c d
所以你的問題居然是:爲什麼標籤失蹤的命令的參數呢?
答案是命令(在這種情況下爲echo
)永遠不會看到選項卡或實際上的空間。 shell將您的命令行解析爲命令名稱和參數列表。它使用空格(製表符和空格)將命令拆分成這些部分。然後它運行命令,將參數列表傳遞給它。
所以echo
收到的是列表'a','b','e','c','d'。它不知道什麼字符最初將它們分開。
然後echo
然後輸出它的每個參數,它們之間有一個空格。因此你看到的輸出。在原始命令行使用單個空格字符分隔每個參數的情況下,輸出與輸入相匹配,因此它看起來很像輸入中的空格也在輸出中 - 但它們不是:shell將原始空格和echo
插入一些新的。
引用標記可用於使shell將多個「單詞」視爲單個參數。例如,如果你這樣做:
$ echo a "b c" d
是通過3個參數echo
:「A」,「B C」和「d」。中間參數包含4個空格;那些得到傳遞到echo
,所以會出現在它的輸出。引號外的空格被shell用於分割參數,所以不會傳遞給echo
。因此,輸出是:
a b c d
要檢查這種東西它更清晰使用一個命令,它顯示你到底有多少爭論收到,什麼是他們每個人。這個Perl單線程將做到這一點:
$ perl -MData::Dumper -E 'say Dumper \@ARGV' a b c d
$VAR1 = [
'a',
'b',
'c',
'd'
];
$ perl -MData::Dumper -E 'say Dumper \@ARGV' "a b c d"
$VAR1 = [
'a b c d'
];
$ perl -MData::Dumper -E 'say Dumper \@ARGV' a "b c" d
$VAR1 = [
'a',
'b c',
'd'
];
$ res="a b c d"
$ perl -MData::Dumper -E 'say Dumper \@ARGV' $res
$VAR1 = [
'a',
'b',
'c',
'd'
];
$ perl -MData::Dumper -E 'say Dumper \@ARGV' "$res"
$VAR1 = [
'a b c d'
];
- 1. Python:將空格替換爲「 - 」
- 2. ajax - 爲什麼jquery用空格(「」)替換「+」?
- 3. 替換爲空格
- 4. PHP:Encoded +被替換爲空格
- 5. 從表中找出空值並將其替換爲空格 - sqlite
- 6. 將URL替換爲空格字符%20
- 7. MySQL將所有空格替換爲 -
- 8. 將空格替換爲連字符
- 9. 如何將 替換爲空格?
- 10. 變量值爲空。爲什麼?
- 11. OSX sed換行符 - 爲什麼將空格轉換爲換行符,但換行符不會轉換爲空格
- 12. 爲什麼在聲明時給變量賦一個空值?
- 13. 將空值替換爲空白
- 14. 用randam值替換空格
- 15. 爲什麼要爲變量「let」賦值?
- 16. 使用帶空格的引號替換宏變量值中的空格
- 17. 使用submit()將空格值替換爲「+」和「,」替換爲「%252C」如何修改?
- 18. 在SQL轉換爲空值,空格
- 19. 將單個空格替換爲單個空格並消除前導空格和尾部空格
- 20. XML用空值替換空格
- 21. 爲什麼Request.QueryString [「path」]將所有的+符號轉換爲空格?
- 22. 爲什麼Firefox不會將%20轉換爲空格('')?
- 23. 如何使用sed將一個空白替換爲空格?
- 24. Ruby on rails:將空間替換爲空格
- 25. 爲什麼建議我用空格替換標籤?
- 26. 刪除空格,並用_替換爲phpMyAdmin
- 27. Style.Add扭曲串,空格替換爲 「%20」
- 28. 替換爲「」(空格)不起作用
- 29. Request.Params被替換字符「+」爲「」(空格).NET
- 30. 替換爲退格空字符串
哦,謝謝@Smylers too.Your點也是對的。 – MoreFreeze