find
配列にグロブを設定する、またはグロブを使用するという明らかに悪い習慣から切り替えるスクリプトがありますls
。
最近、式がファイルをグロブしていないという報告をユーザーから受け取りました。ユーザーは私とは異なる Linux ディストリビューションを使用していますがGNU bash, version 4.2.45(1)-release
、どちらの場合もスクリプトが呼び出されています。私は自分のシェルでは機能するが、彼らのシェルでは機能しないさまざまなバリエーションを試しました。ここに最新のものがあります:
declare -a ARRAY
GLOB="keyword"
VAR=("path/to/file/*${GLOB}*")
ARRAY+=("$VAR")
ただし、私のログはそれを示しています
$ echo ${ARRAY[*]}
path/to/file/*keyword*
予期される/望ましいのではなく、展開されていないワイルドカードを使用
$ echo ${ARRAY[*]}
13_keyword_$23.txt
14_keyword_$24.txt
...
パスには変数が入力されていますがVAR
、正しく展開されており、ファイルが存在しています。ディレクトリには、17_keyword_$22.txt
.
bash間の移植性を期待できるように、誰かが私に欠けているものを教えてくれるのではないかと思います。私のマシンではこの作業のわずかに異なるバージョンがいくつかありましたが、他のバージョンでは機能しませんでした。どの環境変数が切断を引き起こしているのか疑問に思っています。スクリプトにオプションを追加していませんshopt noglob
。すべてのファイル パス関連の変数を二重引用符で囲んでいます。それはそれでしょうか?
編集:簡単に試してみました
ARRAY+=(path/to/file/*'keyword'*.txt
また
GLOB=(path/to/file/*keyword*)
ARRAY+=("$GLOB")
これは私のコンピューターでのみ機能しました。