0

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")

これは私のコンピューターでのみ機能しました。

4

2 に答える 2

3

ワイルドカードを引用すると、グロビングが禁止されます。

VAR=("path/to/file/"*"$GLOB"*)

ただし、他のすべての問題も修正する必要があります。

于 2013-08-30T03:16:54.713 に答える
0

更新情報として、実際のスクリプト (上記の汚いモックアップではありません) の問題は、ユーザーのパーティションのフォーマットが原因でグロビングが機能していないことであることが判明しました。

ext3、ext4、fat32 で良い結果が得られました。しかし、NTFS フォーマットのパーティションでは、グロビングの処理が異なります。少なくとも、問題はグロビングだったと思います。元の問題はまだ解決していませんが、少なくとも別のパーティションを推奨することはできます。

質問に書かれたとおりに正確に答えたので、以前の答えを引き続き受け入れます。

ありがとう!

于 2013-11-06T05:46:15.333 に答える