【问题标题】:ksh error remove from list从列表中删除 ksh 错误
【发布时间】:2023-03-19 09:04:01
【问题描述】:

我正在尝试从 korn shell 的列表中删除某个元素。它在我的 linux 机器上运行,但完全相同的代码在 solaris11 机器上给了我一个错误。我需要一个适用于两者的代码。这可能是因为不同的 ksh 版本,但我想找到一个适用于两者的解决方案。

代码是:

#!/bin/ksh
MY_LIST="HELLO HOW ARE YOU"
toDel="HOW"
MY_LIST=( "${MY_LIST[@]/$toDel}" )
echo "MY LIST AFTER REMOVING HOW IS $MY_LIST"

在 Solaris 上,我收到以下错误: 第 4 行的语法错误:'(' unexpected

有什么建议吗?

【问题讨论】:

  • 我打赌你在两台机器上有不同版本的 ksh
  • 是的,我在几分钟前编辑了我的帖子,这就是问题所在(非常肯定)。但我不知道是否有另一种方法可以删除它,这对双方都有效
  • 你能用sed -e 's/'${toDel}'//'这样的东西吗?
  • 好问题!我还是 bash/ksh 脚本的新手。我会看看 sed 是如何工作的,谢谢
  • 我发现使用 ksh/bash 数组非常烦人。如果您熟悉其他具有数组数据类型的语言,您可能需要考虑:例如:perl -e '@arr = qw( HELLO HOW ARE YOU ); $del = "HOW"; @arr = grep {$_ ne $del} @arr; print "@arr\n"'

标签: solaris ksh


【解决方案1】:

Melodie 写道:最后,我使用了“Walter A”解决方案

很高兴我能帮上忙。 为了让您投票给我并结束问题,我发表了我的评论作为答案。

MY_LIST=`echo $MY_LIST | sed "s/$toDel//"`

【讨论】:

    【解决方案2】:

    最后,我使用了“Walter A”解决方案:

    MY_LIST=`echo $MY_LIST | sed "s/$toDel//"`
    

    【讨论】:

      【解决方案3】:

      您可能需要花一些时间使用ksh88 man page

      无需进一步解释:

      set -A my_list HELLO HOW ARE YOU    # note, separate words
      toDel=HOW
      set --                              # using positional parameters as "temp array"
      for word in "${my_list[@]}"; do 
          [[ $word != $toDel ]] && set -- "$@" "$word"
      done
      set -A my_list "$@"
      printf "%s\n" "${my_list[@]}"
      
      HELLO
      ARE
      YOU
      

      【讨论】:

        猜你喜欢
        • 2022-11-02
        • 1970-01-01
        • 2017-06-25
        • 1970-01-01
        • 1970-01-01
        • 2021-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多