2

次のスクリプトを検討してください。

#! /bin/bash -e

echo {foo,bar}
EX={foo,bar}
echo ${EX}

このスクリプトの出力は次のとおりです。

foo bar
{foo,bar}

echoコマンドでブレース展開を実行したいと思い${EX}ます。したがって、私はの出力を見たいと思います

foo bar
foo bar

展開されたすべてのバージョンがコピーされる中括弧付きのパスをユーザーが指定できるスクリプトを作成したいと考えています。

このようなもの:

#! /bin/bash -e

$SOURCES=$1
$TARGET=$2

cp -r ${SOURCES} ${TARGET}

どうすればこれを達成できますか?

4

3 に答える 3

8

これは方法です:

ex=({foo,bar,baz})
echo ${ex[@]}
foo bar baz
于 2016-05-17T08:50:17.433 に答える
1

ブレース展開は、使用しようとしている方法では機能しません。ブレース展開は基本的に、現在のコマンドのコンテキスト内で適用されるリストを生成するために使用されます。ブレース展開が直接使用される 2 つの主要なモードがあります (およびブレース展開が別の演算子の一部として使用される場合はさらに多くのモードがあります) 。例えば

$ touch file_{a,b,c,d}.txt

コマンドを実行した後、ブレース展開により、現在のディレクトリに適切な形式のファイル名を持つ 4 つのファイルすべてが作成されます。

$ ls -1 file*.txt
file_a.txt
file_b.txt
file_c.txt
file_d.txt

同様の方法でブレース展開を使用して、ループ反復用のリストを生成することもできます (または生成されたシステム/数値の範囲が必要な場合)。ここでブレース展開を使用するための構文は似てい..ますが、ブレース内に (区切りの代わりに',') 区切り文字を使用します。構文は次のとおりです{begin..end..increment}増分は正と負の両方が可能です) 。

$ for i in {20..-20..-4}; do echo $i; done)
20
16
12
8
4
0
-4
-8
-12
-16
-20

(注:beginendまたはに変数を使用することは、恐ろしいincrement策略なしでは許可されていません。使用しないでください。) eval

于 2016-05-17T09:09:50.643 に答える