次のコードが実行されています。
mkdir /home/karan/{Pictures,Public}/yo
上記の行は、yo
andというディレクトリ内に名前付きディレクトリを作成します。ただし、以下のコードを使用するとエラーが発生します。Public
Pictures
mkdir /home/karan/{P*}/yo
error: cannot create directory ‘/home/karan/{P*}/123’
アスタリスクが指定されたディレクトリに展開されないことを理解していますが、その理由は理解できません。また、アスタリスクの拡張を抑制するために引用メカニズムを使用しません。
ベストアンサー1
を使用すると、zsh
次のことができます。
(){ mkdir $^@/yo; } /home/karan/P*(/)
(ここで$^array
open rcexpandparam
(スタイル配列拡張の場合)は拡張とそのglobの拡張rc
にのみ使用されます(ここで、glob修飾子はファイルタイプを制限するために使用されます)$array
/
目次$@
)匿名関数を使用して配列に変換します)。
またはこれを行うこともできます:
mkdir /home/karan/P*(/e:REPLY+=/yo:)
(e
評価glob修飾子を使用して/yo
一致するファイルにaを追加します。)
または:
set -o histsubstpattern
mkdir /home/karan/P*(/:s:%:/yo)
(この場合、:s/string/replacement/
cshスタイルの修飾子を使用して追加されます/yo
。Forはhistsubstpattern
パターンstring
として解釈され、kshと同様に、先行はパターンがテーマの${var/pattern/replacement}
最後%
に固定されることを意味します)
そしてrc
またはデリバティブ:
dirs = ( /home/karan/P*/ )
mkdir $dirs^yo
es
、派生関数の1つは上記と似ていますが、構文が異なる匿名関数もrc
あります。zsh
@ {mkdir $*^yo} /home/karan/P*/
そしてfish
:
set dirs /home/karan/P*/
mkdir ${dirs}yo
ksh93またはbash(またはzsh)を使用すると、いつでも次のことができます。
dirs=(/home/karan/P*/)
mkdir "${dirs[@]/%/yo}"
またはシェルとGNUを使用してくださいxargs
。
printf '%syo\0' /home/karan/P*/ | xargs -r0 mkdir
('s とは対照的に) の拡張には、P*/
ディレクトリへのシンボリックリンクも含まれます。実際に必要なものであれば、glob修飾子を置き換えます。zsh
P*(/)
zsh
/
-/