空白によるグロブエラー

空白によるグロブエラー

私のディレクトリ変数

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

私の for ステートメント:

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

'untitled folder' 内の空白がグロブ処理を妨害しているようです。file0 が '/untitled' になってしまうので、これが原因だと思われます。'shopt -s extglob' があることに注意してください。

答え1

それは本当ではないグロビングを台無しにするここでは、$POSTMAPunquoted を使用することで、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 演算子をエスケープするために使用できます)。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....

関連情報