【问题标题】:Accessing array elements with spaces in TCSH在 TCSH 中访问带有空格的数组元素
【发布时间】:2014-12-04 19:41:26
【问题描述】:

我正在尝试为我们的团队创建一个小的便利脚本。不幸的是,由于历史原因,我们的整个构建环境都基于tcsh。在以下脚本中,BUILD_MATRIX 的每个元素都是以: 分隔的对。我需要分离出这对的每一部分进行处理,但由于某种原因,阵列出现故障。

#!/bin/tcsh

set BUILD_MATRIX = ( "makefile.make:make --jobs --makefile=makefile.make" \
                     "Makefile:make --jobs --makefile=Makefile" \
                     "build.xml:ant" )

foreach pair ( ${BUILD_MATRIX} )
  echo "pair: ${pair}"
end

给予

pair: makefile.make:make
pair: --jobs
pair: --makefile=makefile.make
pair: Makefile:make
pair: --jobs
pair: --makefile=Makefile
pair: build.xml:ant

如您所见,数组是按空格分割的——完全合理,但不是我们想要的。如何获得pair=makefile.make:make --jobs --makefile=makefile.make

【问题讨论】:

  • @EtanReisner 没有看到这个问题,但感谢您的链接。我不认为这是完全重复的——这是两个不同的问题(尽管具有相似的基本原则),所以有两个不同的目标和两个不同的答案。我将尝试将那里给出的答案再次调整到此应用程序。
  • 那里的答案也专门涵盖了foreach的情况。
  • @EtanReisner 哎呀——我的错。我使用大括号语法:${array}:q not 工作。我会将其添加为评论,并将我的答案添加为另一种选择。这应该作为一个骗局关闭。谢谢:)

标签: arrays shell dictionary tcsh


【解决方案1】:

使用链接的副本,我能够找到完整的答案:

foreach pair ( $BUILD_MATRIX:q )
  set candidate = `echo $pair | sed 's/\([^:]*\):\(.*\)/\1/'`
  set command   = `echo $pair | sed 's/\([^:]*\):\(.*\)/\2/'`
  echo "pair: ${pair}"
  echo "candidate: ${candidate}"
  echo "command: ${command}"
end

【讨论】:

    猜你喜欢
    • 2012-02-23
    • 2015-02-19
    • 2021-01-24
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2020-05-16
    • 2015-08-14
    • 2016-11-18
    相关资源
    最近更新 更多