「${files[@]}」の機能を説明できる人はいますか?

「${files[@]}」の機能を説明できる人はいますか?

私は古いファイルを圧縮するスクリプトを書いていますが、オンラインの例の中で以下を見つけました。"${files[@]}"特殊文字の意味や読み方について詳しく知りたいです。"${files[@]}"

files=($(find /var/cdrs -maxdepth 1 -name \*.C*R -mtime +150))
tar cvfz /var/cdrs_backup/CDRBackup_$(date +%Y%m%d_%H%M%S).tar.gz "${files[@]}"

ベストアンサー1

つまり、files配列を作成して拡張します。

あなたは次のように読んだ。

VAR=...変数を割り当てるという意味です。VAR=(...)bash 配列を変数に代入するという意味です。

$(...)これは、コマンドを実行してその出力をキャプチャすることを意味します。あなたの場合、これは与えられたパターンに一致するファイルのリストであり、非常に古いファイルのリストであり、各ファイルをbash配列の要素に割り当てます。

${...}変数値を読み込んでいることを示します。たとえば、次のようになります。

$ SOMEVAR="a value"
$ echo "${SOMEVAR}"
a value

Bashでは$VAR同じ${VAR}ですが、${VAR}表記法を使用するといくつかの追加操作を実行できます。最も注目に値するのは、変数を拡張して文字列に関連付けるのecho "${VAR}iable"ではなく、変数を拡張しようとすることです。あなたもできます$VARiableecho $VARiable$VARiable高度な代替記号を使用してください${...}

私たちの場合は、ファイル変数を読んでいます${file...}。次に、[...]私たちが読んでいることを示します。バッシュ配列。だから私たちはファイル配列の要素にアクセスしようとしています。内部ビットは、どの要素にアクセスできるのか、最初の要素にアクセスできるのか、2番目の要素にアクセスできるのか[...]などを示します。 (bash配列は0ではなく1からインデックスが付けられます。)すべての要素を意味するので、bash配列のすべての要素にアクセスしようとしています。12@file

次の方法を試すことができます。

% ARRAY=("a value" "another value" "fred")
% for x in "${ARRAY[@]}"; do echo "$x"; done
a value
another value
fred

スペースで区切られた文字列を使用するよりも配列を使用すると、上記のように値にスペースを含めることができるという利点があります。したがって、あなたの場合、配列内の各ファイルはfiles別々の引数として扱われ、ファイル名のスペースは正しく処理されます。

したがって、本質的に、スニペットはファイルのリストを見つけて収集し、tarコマンドに別々の引数として渡します。

おすすめ記事