私のディレクトリ変数
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に似たシェルでのみ)、ワイルドカードグローバル演算子をエスケープするために使用できます。split
split+glob
$IFS
$IFS
bash
bash
したがって、次のいずれかを実行します。
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
しれません。zsh
ksh
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....