空白によるワイルドカードエラー

空白によるワイルドカードエラー

私のディレクトリ変数

POSTMAP="/work/Documents/Projects/untitled\ folder/untitled\ folder/*/*_tsta.bam"

私のfor文:

for file0 in ${POSTMAP}; do
...

「タイトルのないフォルダ」の空白がワイルドカードと混同されたようです。私はこれがfile0が「/タイトルなし」で終わるからだと思います。 "shopt -s extglob"があります。

答え1

これは本当ではありませんワイルドカードいたずら。ここでは$POSTMAP、引用符なしで使用すると、分割+グローブ演算子を使用します。

デフォルト値を使用すると、$IFS最初に、および/work/Documents/Projects/untitled\ folder/untitled\ folder/*/*_tsta.bamに分割されます。 3番目の項目にのみワイルドカードが含まれているため、glob部分が適用されます。ただし、globは現在のディレクトリに関連付けられているディレクトリ内のファイルのみを検索します。"/work/Documents/Projects/untitled\""folder/untitled\""folder/*/*_tsta.bam"folder

演算子glob全体ではなく一部だけが必要な場合は、空の文字列に設定してください。この演算子の場合、バックスラッシュは区切り文字をエスケープするためには使用できませんが(Bourneに似たシェルでのみ)、ワイルドカードグローバル演算子をエスケープするために使用できます。splitsplit+glob$IFS$IFSbashbash

したがって、次のいずれかを実行します。

POSTMAP="/work/Documents/Projects/untitled folder/untitled folder/*/*_tsta.bam"
IFS=   # don't split
set +f # do glob
for file0 in $POSTMAP # invoke the split+glob operator
do...

または、、などの配列をサポートするシェルを使用する方が良いbashかもyashしれません。zshksh

postmap=(
  '/work/Documents/Projects/untitled folder/untitled folder/'*/*_tsta.bam
) # expand the glob at the time of that array assignment
for file0 in "${postmap[@]}" # loop over the array elements
do....

関連情報