grepの出力を変数に代入

grepの出力を変数に代入

bashスクリプトの変数にgrepコマンドの出力を割り当てようとしていますが、変数は空です。次のコマンドを実行するとき:

el_value=$(grep '<$2>.*<$2>' $1 | sed -e 's/^.*<$2/<$2/' | cut -f2 -d'>'| cut -f1 -d':')
echo "DEBUG: The value of el_value is '$el_value'"

出力は次のとおりです

DEBUG: The value of el_value is ''

スクリプトの外部でgrepコマンドを実行し、変数を実際の値に置き換えると、予想される出力が得られます。


以下はスクリプトの一部です。このスクリプトを使用して上記の値を追加します。

#!/bin/bash

if [ $# -ne 3 ]; then
echo 1>&2 'This script replaces xml element’s value with the one provided as a command parameter \n\n\tUsage: $0 <xml filename> <element name> <new value>'
exit 127
fi

el_value=`grep "<$2>.*<$2>" $1 | sed -e "s/^.*<$2/<$2/" | cut -f2 -d'>'| cut -f1 -d':'`
echo "DEBUG: The value of el_value is '$el_value'"

ベストアンサー1

努力する:

el_value=$(sed -n "s/.*<$2>\([^:<]*\).*/\1/p" < "$1")

コードの問題は次のとおりです。

  • 一重引用符は$2拡張されていないことを意味します。
  • /検索コマンドgrepに閉じるタグがありません。

おすすめ記事