1

bashのブレース拡張に簡単な問題があります:

#!/bin/bash  
PICS="{x1,x2,x3}.jpg {y1,y2}.png"    
for i in $PICS  
do  
  echo $i  
done

しかし、結果は次のようになります。
{x1、x2、x3} .jpg
{y1、y2} .png
しかし、結果は次のようになります。x1.jpg x2.jpg x3.jpg y1.png y2.png
どうすればよいですか?

4

4 に答える 4

5

簡単な方法は

#!/bin/bash  

for i in {x1,x2,x3}.jpg {y1,y2}.png; do
  echo $i  
done
于 2012-10-09T15:24:30.213 に答える
3

中括弧の展開は行の解析中に実行され、引用符の内側では発生しません。

于 2012-10-09T15:19:38.973 に答える
1

コマンドが評価されるときに、引数に対して中括弧とワイルドカードの展開が実行されます。最初の行を次のように変更します。

PICS=$(echo {x1,x2,x3}.jpg {y1,y2}.png)
于 2012-10-09T15:21:49.890 に答える
0

これらは既に存在するファイルですか? はいの場合、おそらく (ext)glob が必要です。例えば

printf '%s\n' [xy]+([[:digit:]]).@(jp|pn)g

Bash でのブレース展開は、最初の展開手順です。正確なルールは複雑ですが、引用符で囲まれていないコンテキストで主に発生します。後で結果を評価しない限り、文字列に格納することはできません。

printf '%s\n' {x{1..3}.jp,y{1,2}.pn}g

これらは、どのように感じても定義できます。難読化されていないオプションについては、他の回答を参照してください。

また、展開を引用する必要があります。

于 2012-10-09T15:44:14.230 に答える