如何在KSH中为可变容纳空间分配另一个变量

时间:2017-11-23 12:48:40

标签: linux shell unix scripting ksh

我正在编写一个shell脚本来读取输入文件并逐行处理文件的内容。 我计划将每一行存储到一个数组中并稍后处理该数组,如下所示。

#--------------------------------
# Global Variable
file_path="NULL"
set -A array_statements
#--------------------------------
readFileIntoArray()
{
    while IFS= read -r line
    do
        echo "$line"
        array_statements[${#array_statements[*]}+1]="$line"
    done <"$file_path"
}
printTheArray()
{
    for i in ${array_statements[@]}; do 
        echo $i
    done
}
main()
{
    file_path=$1
    readFileIntoArray
    printTheArray
}
main "$@"

该行在单词之间包含空格Hello World How Are You?。当我执行脚本并打印array_statements的内容时,输出为

Hello
World
How
Are
You?

如何将包含空格的变量值分配给另一个变量,或者将包含空格的变量值传递给KSH中的另一个函数。

由于

1 个答案:

答案 0 :(得分:2)

最简单的前进方法可能是废弃当前代码并重构它。

array_statements=()
while read -r line; do
    array_statements+=("$line")
done <"$1"
printf "%s\n" "${array_statements[@]}"

由于代码简化了这一点,将任何封装在一个单独的函数中可能没什么意义。

特别注意如何错过${array_statements[@]}周围的引号会将它们分解为一个快乐的疯狂字符串,从而丢失任何数组元素边界。