大家知道,通过python可以很容易实现各类数据结构,例如列表。但在bash中,实现一个列表相对来说会比较复杂。
笼统的说,bash实现字符串遍历的方式,实际是定义一个数组然后遍历其元素
#!/bin/bash
# Read a string with spaces using for loop
for value in I like programming
do
echo $value
done
结果
$ sh test1.sh
I
like
programming
在变量StringVal中分配文本,并使用for循环读取此变量的值。最终效果跟上例相同
#!/bin/bash
# Define a string variable with a value
StringVal="Welcome to linuxhint"
# Iterate the string variable using for loop
for val in $StringVal; do
echo $val
done
结果
$ sh test2.sh
Welcome
to
linuxhint
在此脚本中使用类型声明字符串值的数组。数组中包含空格的两个值是“ Linux Mint”和“ Red Hat Linux”。该脚本将这些值拆分为多个单词并将其打印为单独的值,从而生成输出。但这不是正确的输出。下一个示例显示了此类问题的解决方案。
#!/bin/bash
# Declare an array of string with type
declare -a StringArray=("Linux Mint" "Fedora" "Red Hat Linux" "Ubuntu" "Debian" )
# Iterate the string array using for loop
for val in ${StringArray[@]}; do
echo $val
done
结果
$ sh test3.sh
Linux
Mint
Fedora
Red
Hat
Linux
Ubuntu
Debian
#!/bin/bash
# Declare a string array with type
declare -a StringArray=("Windows XP" "Windows 10" "Windows ME" "Windows 8.1"
"Windows Server 2016" )
# Read the array values with space
for val in "${StringArray[@]}"; do
echo $val
done
结果:
$ sh test4.sh
Windows XP
Windows 10
Windows ME
Windows 8.1
Windows Server 2016
#!/bin/bash
#Declare a string array
LanguageArray=("PHP" "Java" "C#" "C++" "VB.Net" "Python" "Perl")
# Print array values in lines
echo "Print every element in new line"
for val1 in ${LanguageArray[*]}; do
echo $val1
done
echo ""
# Print array values in one line
echo "Print all elements in a single line"
for val2 in "${LanguageArray[*]}"; do
echo $val2
done
echo ""
结果:
$ sh test5.sh
Print every element in new line
PHP
Java
C#
C++
VB.Net
Python
Perl
Print all elements in a single line
PHP Java C# C++ VB.Net Python Perl
在这里,逗号(,)用于分割字符串值。 IFS变量用于设置字段分隔符。
#!/bin/bash
DataList=" HTML5, CCS3, BootStrap, JQuery "
Field_Separator=$IFS
# set comma as internal field separator for the string list
IFS=,
for val in $DataList;
do
echo $val
done
IFS=$Field_Separator
结果:
$ sh test6.sh
HTML5
CCS3
BootStrap
JQuery
示例演示怎么合并多个数据并遍历出来
#! /bin/sh
str_array1=("Magento 2.2.4" "WooCommerce")
str_array2=("CodeIgnitor" "Laravel")
combine=(str_array1 str_array2)
for arrItem in ${combine[@]}
do
eval 'for val in "${'$arrItem'[@]}";do echo "$val";done'
done
结果:
$ sh test7.sh
Magento 2.2.4
WooCommerce
CodeIgnitor
Laravel
在这里,“ /,/”模式用于根据逗号分割字符串值。
#! /bin/sh
# Define a list of string variable
stringList=WordPress,Joomla,Magento
# Use comma as separator and apply as pattern
for val in ${stringList//,/ }
do
echo $val
done
结果:
$ sh test8.sh
WordPress
Joomla
Magento
参考:
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。