{} と複数の `\ls` を使った複雑なコマンド置換の理解

{} と複数の `\ls` を使った複雑なコマンド置換の理解

私はシェルスクリプトでこの行を理解しようとしています。私はこれがステートメントで見つかった場所$(..)に出力を実行して挿入することを意味することを知っています。しかし、この括弧の間に何が起こりますか?これは何をしますか?以前の内容とはどのような関係がありますか?これは2行に分けられますか?一般と同じですか?..$()\ls\\\\lsls

APPCLASSPATH=$CLASSPATH:$({ \
    \ls -1 "$VOLTDB_VOLTDB"/voltdb-*.jar; \
    \ls -1 "$VOLTDB_LIB"/*.jar; \
    \ls -1 "$VOLTDB_LIB"/extension/*.jar; \
} 2> /dev/null | paste -sd ':' - )

ベストアンサー1

3つのコマンドの出力は、それを値に結合するコマンドlsに渡されます。paste

$VOLTDB_VOLTDB"/voltdb-*.jar:$VOLTDB_LIB"/*.jar:$VOLTDB_LIB"/extension/*.jar

メモ:変数$VOLTDB_VOLTDBsumが$VOLTDB_LIB拡張され、各コマンドに1つのファイルよりも多くの値がある可能性がありますls*そこに見えますか?これは、左(voltdb-)と右(.jar)の間のすべての項目に展開されるワイルドカードです。

これは次のように一致します。

voltdb-1.jar
voltdb-blah.jar
voltdb-12345.jar

その後、すべてが変数に含まれますAPPCLASSPATH

APPCLASSPATH=$CLASSPATH:$VOLTDB_VOLTDB"/voltdb....etc.

貼り付けコマンド

seq以下は、コマンドを使用して数値シーケンス 1-10 を生成する方法の例です。

$ seq 10 | paste -sd ':' -
1:2:3:4:5:6:7:8:9:10

pasteコマンドが出力をマージして:コロン()で区切るのがわかります。

次のようにコマンド例を模倣することもできます。

$ { echo "hi1"; echo "hi2"; echo "hi3"; } | paste -sd ':' -
hi1:hi2:hi3

メモ:to -the Pastコマンドは、STDINから入力を受け取り、入力された各パラメータを印刷するように指示します:

他のスイッチを介してデータの背後にある数字に基づいてデータをグループに分割するpasteこともできます。-

貼り付けの例

以下は2の例です-

$ seq 10 | paste - -
1       2
3       4
5       6
7       8
9       10

これは3です-

$ seq 10 | paste - - -
1       2       3
4       5       6
7       8       9
10

pasteしたがって、1行にいくつの引数を印刷する必要があるかを知らせます。pasteしかし、混同しないでください。作業中の例では、単にSTDINから入力を受け取り、各引数をスペースで区切って印刷します:。 'が複数与えられたら、一度に2つの引数を許可するという-意味です。paste時間、一度に3人、ちょっと待ってください。

一度に2つのパラメータを:「:」で区切ります。

$ seq 10 | paste -d ':' - -
1:2
3:4
5:6
7:8
9:10

$ seq 10 | paste -d ':' - - -
1:2:3
4:5:6
7:8:9
10::

ただし、スイッチを含めると、パラメータを順番に(シリアル)インポートするように-s指示します。paste上記の例のいずれかでこれを使用すると、何が起こるのかを見てください。

一度に2つ:

$ seq 10 | paste -sd ':' - -
1:2:3:4:5:6:7:8:9:10

一度に3つ:

$ seq 10 | paste -sd ':' - - -
1:2:3:4:5:6:7:8:9:10

おすすめ記事