Arrays 从循环内更改数组元素值无法按预期工作
我有一个shell脚本打印功能,如下所示:Arrays 从循环内更改数组元素值无法按预期工作,arrays,bash,shell,scripting,Arrays,Bash,Shell,Scripting,我有一个shell脚本打印功能,如下所示: print_status() { echo "$1|$2|$3|$4" paramArr=("$@") for i in "${#paramArr[@]}" do if [[ -z ${paramArr[i]} ]]; then paramArr[i]="Unknown" fi done echo "${paramArr[*]}" } 该函数应该打印4个值,以“|”作为分隔符。我将print语句保留在函数顶
print_status()
{
echo "$1|$2|$3|$4"
paramArr=("$@")
for i in "${#paramArr[@]}"
do
if [[ -z ${paramArr[i]} ]];
then
paramArr[i]="Unknown"
fi
done
echo "${paramArr[*]}"
}
该函数应该打印4个值,以“|”作为分隔符。我将print
语句保留在函数顶部,只是为了显示如何打印实际值
我还想检查这个函数的每个参数,如果是空值(即变量实际上不包含任何内容),则打印“未知”。我想通过上面的数组paramArr
来完成这项工作。但它并没有像预期的那样起作用
例如:
Output1:
Running|162.103.172.46|3.345|-0.076
Running 162.103.172.46 3.345 -0.076 Unknown
Expected Output 1:
Running|162.103.172.46|3.345|-0.076
Running 162.103.172.46 3.345 -0.076 <-- With a "|" instead of space
Output2:
Not Running|||
Not Running Unknown
Expected Output2:
Not Running|||
Not Running Unknown Unknown Unknown <-- With a "|" instead of space
Output1:
运行| 162.103.172.46 | 3.345 |-0.076
运行162.103.172.46 3.345-0.076未知
预期产出1:
运行| 162.103.172.46 | 3.345 |-0.076
运行162.103.172.46 3.345-0.076会出现几个问题。首先,从零到元素数计算数组索引。当这是4时,你从0到4,这是5个元素,所以你得到一个额外的元素。如果小于4,则不会添加“未知”,因为您的迭代不够远
其次,当您使用[*]
内引号打印数组时,元素之间的分隔符是$IFS
的第一个字符,默认情况下是空格:
print_status()
{
echo "$1|$2|$3|$4"
paramArr=("$@")
for ((i=0; i < 4; i++))
do
if [[ -z ${paramArr[i]} ]];
then
paramArr[i]="Unknown"
fi
done
oldIFS="$IFS"
IFS='|'
echo "${paramArr[*]}"
IFS="$oldIFS"
}
print_status Running 162.103.172.46 3.345 -0.076
print_status 'Not Running'
“${#paramArr[@]}”中i的是一个错误的构造,用于循环数组元素
Running|162.103.172.46|3.345|-0.076
Running|162.103.172.46|3.345|-0.076
Not Running|||
Not Running|Unknown|Unknown|Unknown