node1 node2 node3
他のスクリプトへの入力として使用できるように変数に保存したいと思います。
しかし、私は次のようにbashが提供する中括弧拡張を使用してこれを行いたいと思います。node{1..3}
私は変数を試しましたが、nodes=node{1..3}
それをスクリプトの引数()として使用すると、文字通り選択され、拡張され$nodes
ません。
答え1
配列に割り当てるには、要素を括弧内に入れます。
nodes=(node{1..3})
配列を使用するときは、配列に拡張したいと bash に明示的に通知する必要があります。
mycommand "${nodes[@]}"
kshとbashの配列設計の性質のため、これは配列$node
の最初の要素であり、indexを持つすべての要素を明示的に要求する必要があります[@]
。いつものように、あなたが必要とするのは二重引用符を使用した変数の拡張; を使用すると、[@]
各要素が別々の単語に配置されます。
よりバッシュマニュアルより多くの情報を知りたいです。
node=node{1..3}
中括弧の拡張は、複数の単語が許可されるコンテキストでのみ発生するため、機能しません。スカラー(文字列)変数への割り当ては単一の単語のみを受け入れます。また、Bashは変数拡張の前に中括弧拡張を実行するため、変数を拡張すると単一の単語だけが得られます。
答え2
プロのユーザーが考慮すべき事項:
$ mapfile -t arr < <(printf "%s\n" node{1..3})
$ printf "%s\n" "${arr[@]}"
node1
node2
node3
答え3
この質問を読んだ後、答えを見つけました。$ arrayがkshとbashの配列全体を拡張しないのはなぜですか?
nodes=$(echo nodes{1..3})