5

私の質問は、awk スクリプト内で bash 変数を割り当てることは可能ですか?

つまり、以下が私が書いたシェルスクリプトであると仮定すると、

declare -A sample_associative_array
awk -F'=' '{$sample_associative_array[$2]=$1}'  /tmp/sample.txt

指定された /tmp/sample.txt には次のものがあります。

abc=0
def=1

私は試した

echo $sample_associative_array[0]

そしてそれはうまくいきません。

どんな助けでも大歓迎です。

乾杯!

4

3 に答える 3

9

まったく同じではありませんが、組み込みコマンドawkで使用できる出力文字列を使用して、連想配列を作成できます。ただし、なぜこれをやりたいのかは完全にはわかりません。bashdeclare

$ declare $( awk -F'=' '{print "aa["$2"]="$1}' sample.txt )
$ echo ${aa[0]}
abc
$ echo ${aa[1]}
def
于 2013-03-05T14:27:25.757 に答える
1

いいえ。子プロセスは親の変数に割り当てることができません。言語に関係なく、この問題が発生します。 bash(または私が知っている他のシェル)から配列をエクスポートできないため、連想配列awkを直接読み取ることもできません。bash

言語を混合しようとすると、常にこの種の問題が発生します。一般的なヒントは、ロット全体をまたはのいずれbashかで書くことawkです。どちらも非常に強力です。

于 2013-03-05T08:32:21.637 に答える
1

そんなことはできません。Awk と Bash はまったく異なるスコープの変数を使用しており、一方が他方で宣言された変数を使用できるようにすることは、プロセスの主権に対する重大な違反となります。

あなたがやろうとしていることは、プレフィックス/サフィックスを削除してパラメーター拡張を使用することにより、Bashで非常に簡単に実行でき${parameter#word}ます${parameter%word}。詳細については、Bash のマニュアルを参照してください。

また、Bash の配列参照は他の構文を使用します:${sample_associative_array[0]}が必要です。

于 2013-03-05T08:04:09.130 に答える