bash関数を使用した文字列の解析

bash関数を使用した文字列の解析

いくつかのコードをbash関数に置き換えて再利用しようとしています。だから私の前のコードは次のようになります。

#!/bin/bash
set aline=" dsfsdf | fsdfff | yuhfd "
set line_parsed=`echo $aline | tr '|' "\n"`
echo ${line_parsed[1]}

どの出力dsfsdf

今、文を関数に入れようとすると、正しく理解されません。

#!/bin/bash
parseLine ()
{
set line_parsed=`$echo $1 | tr '|' "\n"`
echo ${line_parsed[1]}
}
set aline=" dsfsdf | fsdfff | yuhfd "
parseLine $aline

文法的なエラーがありますか?

答え1

文字列から配列を作成するには、次のようにします。

IFS='|' read -r -a line_parsed <<< "$aline"

  • IFS='|'バッシュ設定内部フィールド区切り記号到着|
  • read標準入力ファイル記述子から読み取る
    • -rバックスラッシュはエスケープ文字として機能しません。
    • -a line_parsedというファイルを作成します。line_parsed
  • <<< "$aline"ここにある文字列、sの内容を標準入力$alineに渡します。read

これで配列ができました。echo "${line_parsed[0]}"分割文字列の最初の要素を提供します。


これはすべて1つの機能で行われます。

parseLine ()
{
  IFS='|' read -r -a line_parsed <<< "$1"
  echo "${line_parsed[0]}"
}

これで、次のように呼び出すことができます。

$ parseLine "dsfsdf | fsdfff | yuhfd "
dsfsdf

関連情報