bashコマンドの{}

bashコマンドの{}

bash変数にコマンドを使用しようとしてエラーが発生します。コマンドのために発生したようですが、{}どのように解決するのかわかりません。

コマンドは次のとおりです。

add_Area="awk -F\t '{$1="area" FS $1;}1' OFS='\t'"
Output="$( echo $some_csv_-var | ${add_Area})"

エラーは次のとおりです。

awk: 1: unexpected character '''  
fileawk: line 2: missing } near end of file

答え1

一般的に言えば、コマンドを変数に含めてからその変数を実行するのは良い考えではありません。ただし、これを達成するために関数を使用できます。

まず、何が起こっているのか、なぜエラーが発生するのかを説明します。評価の順序についてです。

add_Area="awk -F\t '{$1="area" FS $1;}1' OFS='\t'"

文字列の周囲の二重引用符を使用すると、シェルは変数を評価できます。この場合、$1シェルはそれを表示して処理するため、設定されていない可能性があります。また、二重引用符の中に二重引用符を入れようとします。これは、本質的に二重引用符部分が停止してから後で再開されることを意味します。結果の分布は次のとおりです。

add_Area="awk -F\t '{=area FS ;}1' OFS='\t'"

次の行で実行しようとすると、構文が正しくないため失敗します。

それでは、あなたが達成したいことに対する解決策を見てみましょう。

# Declare a function
add_Area() {
    awk -F$'\t' 'BEGIN { OFS = FS } { $1 = "area" FS $1 } 1'
}

# Use the function as if it were a normal command
Output="$( echo "$some_csv_var" | add_Area )"

# Later
echo "$Output"

関連情報