[20231029]使用cygwin調式bash shell引出的問題.txt
[20231029]使用cygwin調式bash shell引出的問題.txt
--//今天起床後,外面一直淅淅瀝瀝地下著小雨,本來想等雨停了,出去鍛鍊的,可是小雨一直下個不停.
--//只能使用電腦,順便寫一個指令碼完成bbed檢視索引kd_off結構的問題.
--//家裡的電腦沒有linux環境,我也沒有安裝虛擬機器,實在太慢了.想著使用cygwin調式bash shell,沒想到遇到問題.
--//我以前就遇到文字回車換行問題,參考連結:
--//http://blog.itpub.net/267265/viewspace-2784841/ => [20210802]cygwin文字回車換行問題.txt
--//今天有遇到其它問題,記錄一下:
$ seq 10| sed -n "$p"
--//本來想使用sed取出最後1行的,結果沒有輸出.我以前記憶裡面連在一起沒有問題的(更正一下,我的記憶出現錯誤,看後面的補充資訊)
$ seq 10| sed -n "\$p"
10
--//原來cygwin在bash shell解析上存在問題,雙引號裡面的$解析為bash shell變數的一部分.改寫如下:
$ p='$p'
$ Q='$p'
--//注意使用單引號.
$ seq 10| sed -n "$p"
10
$ seq 10| sed -n "$Q"
10
--//當然寫成如下,$和p之間加入1個空格.
$ seq 10| sed -n "$ p"
10
--//當然還有1種寫法就是使用單引號,這樣避免雙引號裡面對bash shell變數的解析.
$ seq 10| sed -n '$p'
10
--//實際上上面的問題還好規避,我儘量使用單引號就是了.
--//但是awk在windows下使用必須使用雙引號,這樣變得就非常複雜,現在想起來記憶混亂髮生在這裡!!
--//比如我想更正kd_off的輸出,bash shell裡面寫成如下:
$ echo p dba 11,156 kd_off | rlbbed | grep kd_off | sed -n '3,$p' | awk -F'[][]' '{printf "%s[%d]%40s\n",$1,$2-2,$3}'
b2 kd_off[0] @136 8024
b2 kd_off[1] @138 8012
b2 kd_off[2] @140 8000
b2 kd_off[3] @142 7988
b2 kd_off[4] @144 7976
b2 kd_off[5] @146 7964
b2 kd_off[6] @148 7952
b2 kd_off[7] @150 7940
b2 kd_off[8] @152 7928
b2 kd_off[9] @154 7916
b2 kd_off[10] @156 7904
b2 kd_off[11] @158 7893
--//如果在windows命令列上執行,必須寫成如下:
d:\tools\bbed>echo p dba 11,156 kd_off | rlbbed | grep kd_off | sed -n "3,$ p" | gawk -F"[][]" "{printf \"%s[%d]%40s\n\",$1,$2-2,$3}"
b2 kd_off[0] @136 8024
b2 kd_off[1] @138 8012
b2 kd_off[2] @140 8000
b2 kd_off[3] @142 7988
b2 kd_off[4] @144 7976
b2 kd_off[5] @146 7964
b2 kd_off[6] @148 7952
b2 kd_off[7] @150 7940
b2 kd_off[8] @152 7928
b2 kd_off[9] @154 7916
b2 kd_off[10] @156 7904
b2 kd_off[11] @158 7893
--//sed必須使用雙引號.awk也是類似,並且裡面的printf也必須使用雙引號,這樣必須\轉義.
--//上班在linux機器測試一下:
$ seq 10 | sed -n "$p"
$ seq 10 | sed -n '$p'
10
--//看來我記錯了,老了.可以理解bash shell在雙引號下,$p當作變數解析.
--//我開始以為awk不受這個限制.實際上也是一樣的.看如下例子:
$ seq 10 | paste -d" " - - | awk '{print $1}'
1
3
5
7
9
$ seq 10 | paste -d" " - - | awk "{print $1}"
1 2
3 4
5 6
7 8
9 10
--//雙引號下,$1解析為空.相當於執行print,自己以後在bash shell程式設計中注意這個細節.
--//哦,我終於明白我為什麼在這個問題上這麼混亂了,在bash shell 下雙引號$a 會解析為某個變數。
--//而在windows的命令列下,awk,sed,grep之類的只能使用雙引號並且不受這個影響,看下面的例子:
D:\>seq 10 | sed -n '$p'
sed: -e expression #1, char 1: Unknown command: ``'''
D:\>seq 10 | sed -n '$ p'
sed: -e expression #1, char 1: Unknown command: ``'''
D:\>seq 10 | sed -n "$p"
10
D:\>seq 10 | awk "NR==10{print $1}"
10
--//windows下$p之類的解析沒有問題,因為windwos的cmd不會解析$p,$1當作變數處理。
D:\>seq 10 | awk 'NR==10{print $1}'
awk: cmd. line:1: 'NR==10{print
awk: cmd. line:1: ^ Invalid char ''' in expression
D:\>echo "111" | grep "1"
"111"
D:\>echo "111" | grep '1'
--//實際上grep 過濾的字串是'1'.
d:\>echo "1111"'1'
"1111"'1'
--//注意windows下echo與bash shell下的echo輸出不同.
d:\>echo "1111"'1' | grep '1'
"1111"'1'
d:\>D:\tools\linux\usr\local\wbin\echo "1111"'1'
1111'1'
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2991961/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20230310]nc reverse bash shell問題.txt
- [20231109]bash shell快捷鍵alt+number的問題.txt
- [20231102]除錯bash shell指令碼遇到的問題.txt除錯指令碼
- [20210107]編寫bash shell指令碼遇到的問題.txt指令碼
- [20231123]函式與bash shell呼叫.txt函式
- [20180930]bash shell &.txt
- [20210913]bash shell $* and $@ 的區別.txt
- [20210802]cygwin文字回車換行問題.txt
- [20190929]bash使用bc計算的相關問題.txt
- [20210908]Reverse Shell with Bash.txt
- [20210330]bash使用source or ..呼叫shell指令碼注意txt指令碼
- [20201116]bash shell IO重定向.txt
- [20181212]bash shell 字串 補零.txt字串
- [20181229]bash shell的算術運算 .txt
- [20210901]cygwin下使用bbed.txt
- [20230314]nc reverse bash shell alias.txt
- [20201109]bash shell特殊算術方式.txt
- [20210618]記錄bash shell執行的命令.txt
- [20190419]bash單雙引號問題.txt
- [20210324]bash shell value too great for base.txt
- [20231023]生成bbed的執行指令碼(bash shell).txt指令碼
- [20221111]bash eval設定變數問題.txt變數
- [20210126]bash ln建立軟連結問題.txt
- mysql 刪表引出的問題MySql
- [20230309]nc reverse bash shell or cmd.exe(windows).txtWindows
- [20201119]安裝cygwin.txt
- [20201120]cygwin與ssh.txt
- [20181227]bbed的使用問題.txt
- [20221104]bash exec使用技巧.txt
- [20210906]沒有想到bash shell還可以這樣寫.txt
- [20180509]函式索引問題.txt函式索引
- [20190314]使用strace注意的問題.txt
- [20181217]strace使用問題.txt
- bash shell 無法使用 perl 正則
- [20190126]從sqlplus執行結果返回bash shell變數.txtSQL變數
- [20220811]奇怪的隱式轉換問題.txt
- Bash Shell指令碼中的陣列使用例項指令碼陣列
- [20210303]bbed使用小問題.txt