コマンドの出力を配列に保存したいと思います。私はここで尋ねる同様の質問から得て、次のコマンドを試しました。私が使用したシェルコマンドを以下で見つけます。
#!/bin/ksh
mailx -H >mytest.txt
#awk '/Incident/{ print NR;}' mytest.txt >lineNum.txt
msgNumbers=$(awk '/Incident/{ print NR;}' mytest.txt)
echo $msgNumbers
UNIXでは、このコマンドを直接実行して目的の結果を得ることができます。ただし、シェルスクリプトで同じコマンドを使用するとエラーが発生します。
"syntax error at line 5: `msgNumbers=$' unexpected"
誰かがこのエラーを指摘できますか?
ベストアンサー1
このエラーは、Solaris 10以前を除いて、今日はほとんど使用されていない1970年代の非常に古いシェルであるBourneシェルを使用してスクリプトを解釈するときに発生します。
したがって、私の考えでは、このスクリプトは/bin/sh
Solaris 10以下で解釈され、ksh
Solarisでは標準sh
です/usr/xpg4/bin/sh
。
Bourne シェルは$(...)
コマンド置換形式をサポートしません。コマンド`...`
置換を使用する必要があります。
とにかく、sh
BourneシェルやPOSIX仕様は配列をサポートしていません。 Solaris 10(ksh88ベース)コマンド出力の空で/bin/ksh
ない行の内容を配列変数に割り当てるには、次の手順を実行する必要があります。
set -o noglob
IFS='
'
set -A array -- $(cmd)
(ksh88配列は4096以上の要素を持つことはできません。)
次に、配列の要素を次のように表示します。
((${#array[@]})) && printf '"%s"\n' "${array[@]}"
スクリプトにshe-bangがある場合は、she -bangの代わりに#!/bin/ksh
呼び出す必要があります。/path/to/the/script
ksh /path/to/the/script
sh /path/to/the/script