私はBourneシェルの初心者で、単純な配列シミュレーションを行いたいと思っています。これは動作します:Bourneシェルでawkにシェル変数を渡すには?
COLORS='FF0000 0000FF 00FF00'
i=2
color=$(echo ${COLORS} | awk '{print $2}')
echo "color selected: $color"
は、私は何をしたい(これは後のループで使用されます)印刷中の固定$2
パラメータの代わりに$i
を渡すことです。これを行うには、一重引用符と二重引用符を正しく組み合わせて何時間も費やした。
+ COLORS=FF0000 0000FF 00FF00
+ i=2
+ echo FF0000 0000FF 00FF00 | awk '{print $2}'
./tempgraph.sh: ./tempgraph.sh: 37: echo FF0000 0000FF 00FF00 | awk '{print $2}': not found
+ color=
+ echo color selected:
color selected:
すべてのヘルプは高く評価されています
私が得た最も近いが、実行結果が
color=$("echo ${COLORS} | awk '{print "$"${i}}'")
です。
ありがとうございました!それはうまく動作しますが、私は引用符をよく理解しているかどうかはわかりません。 1つは二重引用符がそれの中のものを拡張した後にシェルによって食べられると思うでしょうが、awkにも渡されるようです。 – Arthur
* *はシェルによって食べられますが、一重引用符も同様です。両方とも文字列を囲みます。たとえば、通常 'foo a b 'は' foo'の第1引数として 'a'を、第2引数として' b'を渡します。しかし 'foo" a b ""を使うと、シェルは 'foo'の唯一の引数として' a'を渡します。一重引用符と二重引用符の大きな違いは、二重引用符では、変数のような他のものを "埋め込む"ことができるということです: '$ i 'を引数として渡すと、本当に' $ i'という文字列が渡されます。しかし '' $ i ''で、変数' i'の内容が渡されます。 – DarkDust