【问题标题】:Korn shell - print empty arrayKorn shell - 打印空数组
【发布时间】:2018-01-29 15:37:12
【问题描述】:

我遇到的问题是,在使用 ksh 时,一个空数组被打印为两个括号。

的输出
#!/bin/ksh

a=()
printf "%s\n" "${a[@]}"

(
)

使用 bash 时,会打印一个空行。如何在 ksh 中获得这种行为?

当我尝试检查数组是否为空时,它始终只有一个元素: 例如

echo ${#a[@]}

给我 1 作为输出。

【问题讨论】:

    标签: arrays printf ksh


    【解决方案1】:

    man ksh 表示 varname=(assign_list) 用于“索引数组分配”。 assign_list 不是可选的。

    因此,如果您执行a=() 会发生什么是未定义的。似乎创建了一个普通变量。

    b= 
    echo "${#b[@]}" 
    

    也给出 1。您正在强制普通变量像数组一样工作。

    如果你是unset a[0],或者unset a,那么echo ${#a[@]}会给你0并且打印那个未定义的数组/变量会打印一个空字符串。

    如果你想将变量定义为一个数组,你应该使用typeset -a a,然后你会得到一个没有元素的数组,按预期打印(现有的普通变量将被取消设置)。而且您的代码清楚地显示了应该如何处理变量/数组。

    【讨论】:

      猜你喜欢
      • 2017-09-25
      • 1970-01-01
      • 2017-07-29
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多