1

ブレース展開( ) からスペースを削除するために、パラメーター展開(検索と置換など)を適用したいと考えています。可能です?{a..z}

だから私は次の範囲を持っています:{a..z}すべての文字で構成され、一度にスペースを削除したいと思います。

より長い例を次に示します。

$ echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
$ az=$(eval echo {a..z})
$ echo $az
a b c d e f g h i j k l m n o p q r s t u v w x y z
$ echo ${az// /}
abcdefghijklmnopqrstuvwxyz

パラメータ展開を範囲に直接適用することはできますか? または、特にこれを変数に割り当てずに、少なくとも1つの式で作成するには?


使用例の 1 つは、すべてのパラメータを動的に指定することgetoptsです。次に例を示します。

while getopts {a..z} arg; do
  printf $arg
done

./az.sh -a -b -cただし、その範囲のスペースを最初に削除する必要があるため、これは機能しません (たとえば)。

4

2 に答える 2

3

代わりに次のコードを使用してください。

$ printf '%s' {a..z}; echo
abcdefghijklmnopqrstuvwxyz

これは、var (bash) を使用する必要がある場合:

$ printf -v var '%s' {a..z}
$ echo "$var"
abcdefghijklmnopqrstuvwxyz

パラメータ展開は、パラメータにのみ適用できます (したがって、その名前が付けられています)。
いいえ、「パラメーター展開」を「ブレース展開」に適用することはできませんでした。
次の 2 つの手順で行う必要があります。

var="$(printf '%s ' {a..z})"
var="${var// /}"

したがってgetopts、例は次のようになります。

while getopts "$(printf '%s' {a..z})" arg; do
  printf '%s' "$arg"
done
于 2015-12-30T21:30:16.727 に答える
0
$ set {m..z} && IFS=, && echo "$*"
m,n,o,p,q,r,s,t,u,v,w,x,y,z
$ set {m..z} && IFS='' && echo "$*"
mnopqrstuvwxyz
于 2015-12-30T21:40:33.940 に答える