2017-09-26 8 views
0

私は配列にパラメータを分割して、別の変数に代入できるようにしようとしていますが、何らかの理由で 'read -a'が動作しないというエラーが発生します。read -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

あなたのシェルは何ですか?ここにシバンはありません。 –

+0

(そして、err ... '.ksh'?)私はkshのshebangも表示していませんが、あなたがそれを実行していることを確認したいなら、'#!/ usr/bin/env bash'多くの*互換性のないバージョンのkshがたくさんあるので、実際に使用している特定のものを記述する必要があります。 –

+0

ええ、私はそれを持っています。申し訳ありませんがスクリプト全体をコピーします #!/ bin/ksh – ella

答えて

3

read -aread組み込みに標準化されたオプションではありません。 readのPOSIX規格のhttp://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.htmlを参照してください。また、POSIX sh(すべてのPOSIXシェルのベースライン仕様)では、配列はすべてに指定されていません。

拡張子ではなく、特定のシェルでのみ使用できます。拡張を取得するには、それらの特定のシェルの1つを使用している必要があります。

  • 拡張シェル(bash yourscript)で明示的にスクリプトを開始してください。

を(スクリプトの最初の行として#!/bin/bash又は#!/usr/bin/env bash)を拡張シェルを示すシェバングを使用して、シェルがkshであれば、同等の拡張はread -Aあります。

+0

ありがとうございます! "| BBBB | CCC | DDDD AAA" AAA | BBBB | CCC | DDDD AAA BBBB私は私のシェバングを変更した後 $ ./sftpupstream.ksh CheckFile-4.1は、bashのは、それが動作するようになりました(それはkshのだった)bashをすることが ccc dddd bash-4.1 $ – ella

+0

kshで作業するには 'read -A'に変更することもできます。 –

関連する問題