1. 程式人生 > >linux shell 字串長度

linux shell 字串長度

本篇內容主要包括以下內容:

  1.    獲取字串長度的方法
  2.    各方法間效能比較
  3.    相關內容補充

說明:本篇內容為學習shell  程式設計(老男孩教程) 筆記,部分內容為相關視訊課程內容,補充部分是我查資料所得,方便理解學習。有需要老男孩shell 程式設計視訊教程的同學,可以在評論區回覆。

   1.獲取字串長度

         首先做個示例資料出來:

[email protected]:~$ vars=`seq -s " "  100`
[email protected]
:~$ echo $vars 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
[email protected]
:~$

至於這裡涉及到的seq 命令,會在第三部分(相關內容補充中會詳細說到)。

        1.使用字串長度獲取${#var} 

[email protected]:~$ echo ${#vars}
291
[email protected]:~$ 

         2.使用wc 方法

[email protected]:~$ echo $vars | wc -m
292
[email protected]
:~$

     注:使用這種方法統計出來的字串長度要比實際字元長度多1。wc 命令會在後面介紹到。

     3. 使用$(expr length "$var") 方法

[email protected]:~$ echo $(expr length "$vars")
291
[email protected]:~$ 

 

2.效能比較

    

[email protected]:~$ time for i in $(seq 10000);do count=`echo ${#vars}` ;done;

real	0m11.540s
user	0m0.308s
sys	0m3.764s
[email protected]:~$ time for i in $(seq 10000) ;do count=`echo $vars | wc -m` ;done

real	0m44.385s
user	0m0.480s
sys	0m5.852s
[email protected]:~$ time for i in $(seq 10000);do count=`echo expr length "${chars}"`;done;

real	0m11.681s
user	0m0.204s
sys	0m3.908s
[email protected]:~$ 

我們看到速度相差幾倍(我這裡數量級不大,試過好多次,一開始是從一百萬開始測試的,結果有點慢,就折中了下),這裡數量不大,差異不明顯。一般情況呼叫外部命令處理,與內建功能操作效能相差較大。在shell 程式設計中,我們應儘量用內建操作或函式完成。

3.相關內容補充

    1.seq  

這裡說下seq 命令的man 結果:

    

 

選項比較少:

  • -f, --format=格式        使用printf 樣式的浮點格式
  • -s, --separator=字串   使用指定字串分隔數字(預設使用:\n)
  • -w, --equal-width        在列前新增0 使得寬度相同

%後面指定數字的位數 預設是%g,%3g那麼數字位數不足部分是空格。

[email protected]:~$ seq -f "str%3g" 1 10
str  1
str  2
str  3
str  4
str  5
str  6
str  7
str  8
str  9
str 10
[email protected]:~$ seq -f "str%03g" 1 10
str001
str002
str003
str004
str005
str006
str007
str008
str009
str010
[email protected]:~$ seq -f "str%03g" 90 100
str090
str091
str092
str093
str094
str095
str096
str097
str098
str099
str100
[email protected]:~$ 

-w選項:指定輸出數字同寬

[email protected]:~$ seq -w 1 10
01
02
03
04
05
06
07
08
09
10
[email protected]:~$ 

-s選項:指定分隔符(預設是回車)

[email protected]:~$ seq -s " | " 1 10
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10
[email protected]:~$ seq -s " | " -f "str%03g" 9 11
str009 | str010 | str011
[email protected]:~$ 

2.wc  

還是一樣,先直接上man wc 結果

  

-c或--bytes或——chars:只顯示Bytes數

-l或——lines:只顯示列數

-w或——words:只顯示字數
[email protected]:~$ cat /etc/passwd | wc 
     37      59    1968
[email protected]:~$ cat /etc/passwd | wc -c
1968
[email protected]:~$ cat /etc/passwd | wc -m
1968
[email protected]:~$ cat /etc/passwd | wc -w
59
[email protected]:~$ cat /etc/passwd | wc -l
37
[email protected]:~$ 

 

 

3.time

time 命令用來統計給定命令(或程式)執行時間和系統資源消耗情況。

這個命令的詳細引數及例子,我推薦這個:http://www.runoob.com/linux/linux-comm-time.html

expr 這個命令,通過man expr 後可以看到,是執行表示式的。

這個命令由於在 shell 程式設計中使用的比較多,會在後續新寫一篇文章來說一下,簡單的可以參考下這個:http://www.runoob.com/linux/linux-comm-expr.html