2017-09-26 64 views
0

我想將一個參數表分成數組,以便我可以分配到不同的變量,但不知何故,我得到錯誤說'讀-a'不起作用。閱讀-a在unix中不工作

命令:

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 
+1

你的殼是什麼?這裏沒有shebang。如果你想確定它運行在bash –

+0

(和,err ...'.ksh'?)中,你可以用'#!/ usr/bin/env bash'來啓動你的腳本。我也沒有看到ksh shebang,並且由於ksh有許多*許多*不同的不兼容版本,所以您確實需要描述您正在使用的特定版本。 –

+0

是的,我確實擁有它。對不起,沒有複製整個腳本 #!/ bin/ksh – ella

回答

3

read -a不是標準化的選項給read內置。請參閱POSIX標準read,http://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html,並注意POSIX sh(所有POSIX shell的基準規範)甚至沒有指定所有上的陣列

相反,它是一個擴展,只在特定的shell中可用。要獲得擴展名,您必須使用這些特定的shell之一。您可以通過以下方式執行此操作:

  • 使用擴展shell(bash yourscript)明確啓動腳本。
  • 使用認領表示擴展殼(#!/bin/bash#!/usr/bin/env bash作爲腳本的第一行)

如果外殼是ksh,等效擴展read -A

+0

謝謝!之後,我改變了我的家當是bash的(這是KSH),現在的工作 的bash-4.1 $ ./sftpupstream.ksh CheckFile 「AAA | BBBB | CCC | dddd完整」 AAA | BBBB | CCC | DDDD AAA BBBB ccc dddd bash-4.1 $ – ella

+0

您也可以將其更改爲'read -A'以使用ksh。 –