1

このコードは機能しますが

#!/bin/bash
d="test_files/*"
for f in $d.{mp3,txt} ;do
do something 
done

{mp3、txt}を変数に入れても、そうではありません。以下のコードを参照してください。

#!/bin/bash
a={mp3,txt}
d="test_files/*"
for f in $d."$a" ;do
do smoething
done

ここでの出力は/*.{mp3,txt}です。

{mp3、txt}を配列に入れる

a=({mp3,txt})

拡張子が*.mp3のファイルのみを出力します。

4

1 に答える 1

1

ブレース拡張は他のすべての拡張の前に行われるため、機能しません。

差出人man bash

ブレース展開は他の展開の前に実行され、他の展開に固有の文字は結果に保持されます。厳密にテキストです。Bashは、展開のコンテキストまたは中括弧の間のテキストに構文上の解釈を適用しません。パラメータ展開との競合を回避するために、文字列'${'は中括弧展開の対象とは見なされません。

eval変数に格納されているブレース展開を行うために使用できますが、お勧めしません。例えば:

eval echo "$d.$a"
于 2013-03-15T16:40:36.263 に答える