jay*_*bee 37 arrays bash shell
我试图逐行读取输入文件,其中包含由句点分隔的字段.我想将它们放入一个数组数组中,以便稍后我可以循环它们.输入似乎没问题,但是将它"推"到数组(inData)似乎不起作用.
代码如下:
Input file:
GSDB.GOSALESDW_DIST_INVENTORY_FACT.MONTH_KEY
GSDB.GOSALESDW_DIST_INVENTORY_FACT.ORGANIZATION_KEY
infile=${1}
OIFS=$IFS
IFS=":"
cat ${infile} | while read line
do
line=${line//\./:}
inarray=(${line})
# echo ${inarray[@]}
# echo ${#inarray[@]}
# echo ${inarray[0]}
# echo ${inarray[1]}
# echo ${inarray[2]}
inData=("${inData[@]}" "${inarray[@]}")
done
IFS=$OIFS
echo ${#inData[@]}
for ((i = 0; i < ${#inData[@]}; i++))
do
echo $i
for ((j = 0; j < ${#inData[$i][@]}; j++))
do
echo ${inData[$i][$j]}
done
done
Run Code Online (Sandbox Code Playgroud)
Luk*_*říž 25
在bash中的字段巢框但它无法绕过看到的例子.
#!/bin/bash
# requires bash 4 or later; on macOS, /bin/bash is version 3.x,
# so need to install bash 4 or 5 using e.g. https://brew.sh
declare -a pages
pages[0]='domain.de;de;https'
pages[1]='domain.fr;fr;http'
for page in "${pages[@]}"
do
# turn e.g. 'domain.de;de;https' into
# array ['domain.de', 'de', 'https']
IFS=";" read -r -a arr <<< "${page}"
site="${arr[0]}"
lang="${arr[1]}"
prot="${arr[2]}"
echo "site : ${site}"
echo "lang : ${lang}"
echo "prot : ${prot}"
echo
done
Run Code Online (Sandbox Code Playgroud)
cho*_*oba 22
Bash不支持多维数组.尝试
array=(a b c d)
echo ${array[1]}
echo ${array[1][3]}
echo ${array[1]exit}
Run Code Online (Sandbox Code Playgroud)
有关如何模拟它们的技巧,请参阅Advanced Bash Scripting Guide.
Nux*_*Nux 10
知道你可以将字符串拆分为"数组".您可以创建列表列表.例如,DB服务器中的数据库列表.
dbServersList=('db001:app001,app002,app003' 'db002:app004,app005' 'dbcentral:central')
# Loop over DB servers
for someDbServer in ${dbServersList[@]}
do
# delete previous array/list (this is crucial!)
unset dbNamesList
# split sub-list if available
if [[ $someDbServer == *":"* ]]
then
# split server name from sub-list
tmpServerArray=(${someDbServer//:/ })
someDbServer=${tmpServerArray[0]}
dbNamesList=${tmpServerArray[1]}
# make array from simple string
dbNamesList=(${dbNamesList//,/ })
fi
# Info
echo -e "\n----\n$someDbServer\n--"
# Loop over databases
for someDB in ${dbNamesList[@]}
do
echo $someDB
done
done
Run Code Online (Sandbox Code Playgroud)
上述产出将是:
----
db001
--
app001
app002
app003
----
db002
--
app004
app005
----
dbcentral
--
central
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62802 次 |
| 最近记录: |