いくつかのコードを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