【问题标题】:How to assign a varaible containg spaces to another variable in KSH如何将包含空格的变量分配给 KSH 中的另一个变量
【发布时间】:2018-05-07 10:42:53
【问题描述】:

我正在编写一个 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中的另一个函数。

谢谢

【问题讨论】:

  • 其实我用你贴的代码无法重现症状。
  • 你在使用 KSH 吗?
  • 当然,虽然它不是我喜欢的外壳。
  • 哦,我想我知道出了什么问题。您可能错误地调用了readFileIntoArray。你能告诉我们那部分代码吗?

标签: linux shell unix scripting ksh


【解决方案1】:

最简单的前进路线可能是废弃您当前的代码并重构它。

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

由于代码如此简化,将任何内容封装在单独的函数中可能没有多大意义。

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

【讨论】:

  • 将您的数据收集到一个数组中通常是一种反模式。如果您不是绝对需要随机访问,那么一次只处理一行会更加优雅和高效。
猜你喜欢
  • 2022-11-27
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
  • 2012-03-21
相关资源
最近更新 更多