#!/bin/bash
# This question is from advanced bash scripting guide section 5.1
echo
var="'(]\\{}\$\""
IFS='\'
echo $var
# output is '(] {}$"
# \ converted to space. Why?
echo "$var"
# output is '(]\{}$"
# special meaning of \ used, \ escapes \ $ and " RIGHT?
echo
var2="\\\\\""
echo $var2
# output is "
# \ converted to space. Why?
echo
# But ... var2="\\\\"" is illegal. Why?
var3='\\\\'
echo "$var3" # \\\\
# Strong quoting works, though. Why?
回答
IFS='\' echo $var # o/p is '(] {}$" # \ converted to space. Why?
因爲你告訴一個反斜槓是一個字段分隔殼,因爲你並沒有引述$var
當你回顯出來,它基於IFS是受word splitting。
echo "$var" # o/p is '(]\{}$" # special meaning of \ used, \ escapes \ $ and " RIGHT ?
在這裏,你引述$var
,因此沒有word splitting將對其執行。你的輸出正是你告訴shell var
等於。即'(]\{}$"
var2="\\\\\"" echo $var2 # o/p is " # \ converted to space. Why?
見第一個答案
# But ... var2="\\\\"" is illegal. Why?
因爲每對反斜槓拼成一個反斜槓並沒有反斜線遺留逃脫了第二雙引用。 shell不知道如何處理3個雙引號。
echo "$var3" # \\\\ # Strong quoting works, though. Why ?
見第二回答有關word splitting
注,你也可以使用字符串文字語法$''
可見var=$'\'(]\{}$"'
這將只需要你逃跑了單引號
我還是很困惑。爲什麼在$和$之前沒有轉換爲空間來執行echo $ var? – abc 2011-03-31 00:29:03
@abc:因爲'\'本身不是一個字符,而是表示轉義序列的語法。所以'\ $'和'\「'是告訴shell你想要一個文字'$'和一個文字''',這是必要的,因爲'$'本身對shell有特殊的含義,你必須轉義雙引號,因爲你已經把'var用雙引號括起來的值,它只是'\\',它是一個字面反斜槓,隨後由字段分隔符進行計數 – SiegeX 2011-03-31 04:10:08
Perfect.Thanks @SiegeX! – abc 2011-04-02 18:27:08
- 1. 如何在bash中控制IFS分詞
- 2. 如何在Bash中工作?
- 3. bash,sh,ps在linux中如何工作?
- 4. 'Brace擴展'在Bash中如何工作?
- 5. 分隔符IFS在bash for tcsh?
- 6. Bash如何工作多個
- 7. Ifs和elifs在輪盤遊戲中不能正常工作 - python
- 8. Bash的IFS變量如何影響命令替換?
- 9. 在單引號中使用IFS的Linux bash字符串拆分
- 10. Git在bash中工作,但在Android Studio中不工作
- 11. Python:rsync排除不在腳本中工作,在bash shell中工作
- 12. 如何讓我的bash腳本工作?
- 13. bash命令「grep -v」:0「」如何工作
- 14. bash選項卡完成如何工作?
- 15. bash如何用\工作包裝?
- 16. 如何重構順序ifs?
- 17. 功能在bash不工作
- 18. 別名在bash不工作
- 19. for循環如何在Bash腳本中工作?
- 20. 陷阱/殺死如何在Linux上的bash中工作?
- 21. 如何在bash中快速返回上一個工作目錄?
- 22. 在Bash中工作時,如何處理「太多文件」問題?
- 23. 參數順序如何在Bash Shell腳本中工作?
- 24. 如何通過bash腳本在其他目錄中工作?
- 25. 如何讓awk命令在Bash腳本中工作?
- 26. `extension =「$ {filename ## *。}」`在bash中是如何工作的?
- 27. 如何讓Docker在msys2 bash中正常工作?
- 28. 如何讓EOT在bash中的IF ELSE語句上工作?
- 29. 嵌套if/then/elseif如何在bash中工作?
- 30. 如何讓bash自動完成在行中間工作?
請格式化您的問題,以便我們能夠理解它。 – 2011-03-30 22:28:00
對不起,但你不明白什麼?格式不正確? – abc 2011-03-30 22:28:57
您的帖子的哪些部分是您的問題以及哪些部分是腳本尚不清楚。更不用說大部分腳本根本沒有格式化。 – 2011-03-30 22:30:56