
私のディレクトリ変数
POSTMAP="/work/Documents/Projects/untitled\ folder/untitled\ folder/*/*_tsta.bam"
私の for ステートメント:
for file0 in ${POSTMAP}; do
...
'untitled folder' 内の空白がグロブ処理を妨害しているようです。file0 が '/untitled' になってしまうので、これが原因だと思われます。'shopt -s extglob' があることに注意してください。
答え1
それは本当ではないグロビングを台無しにするここでは、$POSTMAP
unquoted を使用することで、split+glob 演算子を使用しています。
のデフォルト値 を使用すると$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 のようなシェル間でのみ、ワイルドカード glob 演算子をエスケープするために使用できます)。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....