tft每日頭條

 > 科技

 > shell字符串切成數組

shell字符串切成數組

科技 更新时间:2024-08-30 15:11:44
前言

shell編程過程中,很多時候需要操作數組,而命令返回的一般都是字符串,如何将字符串根據指定的符号進行分割呢?

shell字符串切成數組(shell腳本-如何将字符串分割成數組)1

這裡就需要有到一個變量IFS( Internal Field Separator,内部的域分隔符),IFS的默認值為:空白(包括:空格,tab, 和新行)

如果直接用 echo $IFS看不出來,可以将結果用ASSII碼用十六進制打印出來:

echo -n "$IFS" | xxd -g 1

00000000: 20 09 0a ..

十六進制的20是32

十六進制的09是9

十六進制的0a是10

根據下面的圖就可以看出來是哪個符号:

shell字符串切成數組(shell腳本-如何将字符串分割成數組)2

ASCII 10進制

分割字符串

如果要以默認的這三種符号進行分割,就不需要修改變量。

例子:

#!/bin/bash

a="one two three four"

array=($a)

for s in ${array[@]}

do

echo $s

done

執行結果:

shell字符串切成數組(shell腳本-如何将字符串分割成數組)3

如果是其他分割符,就需要修改這個變量。(修改的時候記得先保存一下變量,分割完就馬上賦值回去,防止下面輸出的格式變了)

例子:

#!/bin/bash

a="one,two,three,four"

OLD_IFS="$IFS"

IFS=","

array=($a)

IFS="$OLD_IFS"

for s in ${array[@]}

do

echo $s

done

執行結果:

shell字符串切成數組(shell腳本-如何将字符串分割成數組)3

array=($a)用于将字符串$a分割到數組$array ${array[0]} ${array[1]} ... 分别存儲分割後的數組第1 2 ... 項 ,${arr[@]}存儲整個數組。

IFS對空格的空白的處理和其他字符不一樣,左右兩邊的純空白會被忽略,多個連續的空白被當成一個IFS處理。

多個符号進行分割

#!/bin/bash

a="1,,,2::3"

OLD_IFS="$IFS"

IFS=",:"

array=($a)

IFS=OLD_IFS

for s in ${array[@]}

do

echo $s

done

執行結果:

shell字符串切成數組(shell腳本-如何将字符串分割成數組)5

總結

寫shell腳本不好debug,很容易出錯,可以使用bash -x scripts.sh 執行,來查看具體的執行步驟。shell腳本雖然方便,但是執行效率嘛。。。。。

shell字符串切成數組(shell腳本-如何将字符串分割成數組)6

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved