0

コードに以下のエラーが表示されます。何が欠けていますか? 私の目標は、 $version で 13.0.5.8 を印刷することです

 #!/bin/ksh

 file="abc_def_APP_13.0.5.8"
  if echo "$file" | grep -E "abc_def_APP"; then
        echo "Version found: $file"

    version1=(echo $file |  awk -F_ '{print $NF}' | cut -d. -f1-3)

    version2=(echo $file | awk -F_ '{print $NF}' | cut -d. -f4-)

    echo $version1

    echo $version2

        version=$version$version2

        echo $version
 else
       echo "Version not found"
  fi

以下のエラーを見つけてください。

 ./version.sh: line 7: syntax error near unexpected token `|'
./version.sh: line 7: ` version1=(echo $file |  awk -F_ '{print $NF}' | cut -d. -f1-3)'
./version.sh: line 9: syntax error near unexpected token `|'
./version.sh: line 9: ` version2=(echo $file | awk -F_ '{print $NF}' | cut -d. -f4-)'



./version.sh: line 18: syntax error near unexpected token `else'
4

3 に答える 3

1

問題は、バッククォートが欠落している$ことです。次の 2 行を次のように修正する必要があります。

version1=$(echo $file |  awk -F_ '{print $NF}' | cut -d. -f1-3)

version2=$(echo $file | awk -F_ '{print $NF}' | cut -d. -f4-)

これにより、構文エラーが修正されます。$version次の行は、まだ初期化されていないため、あまり意味がありません。

version=$version$version2

もしかして:

version="${version1}.${version2}"

-Eオプションを使用しているが、拡張正規表現機能を使用していないことに注意してください。grep実際には、固定文字列の文字列検索を行っているため-F、より適切です。-qからの出力を抑制するオプションを使用することもできますgrep

個人的には次のようにします。

file="abc_def_APP_13.0.5.8"

echo "$file" | awk '/abc_def_APP/{print "Version found: "$0;
                                  print $4,$5,$6;
                                  print $7;
                                  print $4,$5,$6,$7; 
                                  next}
                    {print "Version not found"}' FS='[_.]' OFS=.

変数にバージョン番号だけが必要な場合は、version単純に次のようにしないでください。

version=$(echo "$file" | grep -o '[0-9].*')
于 2013-05-08T17:37:01.737 に答える
0

これはすべて単一の awk コマンドで実行でき、追加のカット コマンドは必要ありません。次のコマンドを検討してください。

read version1 version2 < <(echo $file|awk -F "[_.]" '{
   printf("%s.%s.%s ", $4, $5, $6); printf("%s", $7);
   for (i=8; i<=NF; i++) printf(".%s", $i); print ""}')

echo "$version1 :: $version2"

出力

13.0.5 :: 8
于 2013-05-08T17:59:20.913 に答える