【问题标题】:read -a doesn't work in unixread -a 在 unix 中不起作用
【发布时间】:2017-09-26 16:09:03
【问题描述】:

我正在尝试将参数拆分为数组,以便我可以分配给不同的变量,但不知何故我收到错误消息说“读取 -a”不起作用。

命令:

bash-4.1$ ./sftpupstream.ksh CheckFile "aaa|bbbb|ccc|dddd"
aaa|bbbb|ccc|dddd
./sftpupstream.ksh[20]: read: -a: unknown option
Usage: read [-ACprsSv] [-d delim] [-u fd] [-t timeout] [-n count] [-N count] [var?prompt] [var ...]

代码:

RUN_MODE=$1
PARAMSTR=$2

echo $PARAMSTR
IFS="|" read -a arr <<< "$PARAMSTR"
for i in "${arr[@]}"; do
        echo "$i"
done

【问题讨论】:

  • 你的外壳是什么?这里没有shebang。如果您想确定它在 bash 中运行,请使用 #!/usr/bin/env bash 开始您的脚本
  • (而且,错误....ksh?)我也没有看到 ksh shebang,而且由于 ksh 有许多 许多 不同的不兼容版本,所以你确实需要描述您使用的是哪个特定的。
  • 是的,我有。抱歉没有复制整个脚本#!/bin/ksh
  • 请确保您提供minimal reproducible example - 生成相同问题的最短代码。 (也就是说,复制整个脚本并不理想,但是应该测试您所做复制的内容以展示问题)。
  • 顺便说一句,仔细看看 read 命令,它看起来很像 ksh 而不是 bash。在 ksh 中,数组的参数是 -A,而不是 -a

标签: arrays shell unix


【解决方案1】:

read -a 不是 read 内置的标准化选项。请参阅http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.htmlread 的 POSIX 标准,并注意 POSIX sh(所有 POSIX shell 的基线规范)甚至没有指定数组

相反,它是一个扩展,仅在特定的 shell 中可用。要获得扩展,您必须使用这些特定的 shell 之一。你可以这样做:

  • 使用扩展 shell (bash yourscript) 显式启动脚本。
  • 使用指示扩展外壳的 shebang(#!/bin/bash#!/usr/bin/env bash 作为脚本的第一行)

如果您的 shell 是 ksh,则等效扩展名是 read -A

【讨论】:

  • 谢谢!在我将 shebang 更改为 bash(它是 ksh)之后,它现在可以使用 bash-4.1$ ./sftpupstream.ksh CheckFile "aaa|bbbb|ccc|dddd" aaa|bbbb|ccc|dddd aaa bbbb ccc dddd bash-4.1 $
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 2018-04-28
  • 2018-07-21
  • 1970-01-01
相关资源
最近更新 更多