1. 程式人生 > >shell 指令碼中求一個字串的長度

shell 指令碼中求一個字串的長度

shell 中沒有可以直接求 某個字串變數的長度,有時候 想判斷 這個字串的長度,該如何是好呢, 我們都知道  -n  -z  分別是 字串不為空, 和字串 為空。

有時候想知道,字串的長度 ,卻沒有一個好的辦法。 

有一個辦法,可以用 awk  在awk 中有一個函式, length()  就可以 獲取字串的長度

awk  'BEGIN { print length("chang11115")'}
這裡就可以獲取字串的長度。

但是如果要寫在shell 指令碼中 需要把 shell 變數傳入到   awk 中, 可以用 -v  選項。

#!/bin/bash
curDir=$(cd "$(dirname "${BASH_SOURCE[0]}")"; pwd);    #當前絕對路徑

mystring='aaabbb'
#把mystring ,傳入到awk 中, 用 -v   string=$mystring 
len=`awk  -v string=$mystring 'BEGIN { print length(string)'}`

echo "len:$len"

這樣就可以了,mystring 的長度 求出來了。



如果 mystring=‘aaa bbb  ccc’ ,也就是 mystring  有空格 這個時候執行 上面指令碼 就會報錯。

錯誤如下:

[root@bdc130 shell]# sh  4.sh 

錯誤如下:
awk: 命令列:1: 致命錯誤: 無法以讀模式開啟檔案“ccc”(沒有那個檔案或目錄)
len:

這個可能是awk  -v  選項 傳值的時候,以空格把它們分開了。因此,在 mystring 加上引號,就可以了.

#!/bin/bash
curDir=$(cd "$(dirname "${BASH_SOURCE[0]}")"; pwd);    #當前絕對路徑

#mystring='mylinuxcentos'
mystring='aaa bbb ccc'

#echo "mystring:$mystring"
len=`awk  -v string="$mystring" 'BEGIN { print length(string)'}`

echo "len:$len"


這樣就可以,非常簡單吧。

2017年 10月 10日 星期二 20:02:15補充:

 其實shell  指令碼中是可以 直接取到字串的長度的。

${#變數名}  這樣就可以取到字串的長度了。

#!/bin/bash
mystring="changyubiao"
#mystring="chang"

length=${#mystring}

echo $length

這樣就可以 取到 字串的長度。 

分享快樂,留住感動。 喜歡就給我點贊吧。