- ベストアンサー
zshのワイルドカード展開について
- zshのワイルドカード展開について初歩的な質問ですが、ホームディレクトリの親ディレクトリ内に作成したファイルをlsコマンドで表示しようとすると、エラーが表示されます。
- zshrcの設定を確認しても展開されないため、zshのワイルドカード展開方法が特殊な可能性があります。
- 他のシェルではワイルドカードが展開される一方、zshではワイルドカード展開がうまく機能しない問題が発生します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
zshは、変数への代入の右辺では、ファイル名展開が行われないようですね。 何かオプションが無いかと、man zshexpn を見てみましたが、よくわかりません。 とりあえずでよければ、 files=$(echo ~/../te*.txt)
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
今、動作確認できないのですが。 > files=~/../te*.txt このあと、 echo $files したらどうなります? 念のため。 ファイル名展開は、files=の時点で行われます。lsは、その展開されたファイル名一覧を引数にもらうだけで、*等の展開は行いません そのエラーメッセージからすると、zshでは echo $files でその入力されたままの~/../te*.txt が出力されると思います。
お礼
ご回答ありがとうございます。 補足に間違いがありました。失礼しました。 .zshrc内の2行目 compinit -u は1行目と重複しているので不必要でした。
補足
ご回答ありがとうございます。 ホームディレクトリを/home/user1として > files=~/../te*.txt > echo $files /home/user1/../te*.txt と表示されます。 ご指摘いただいたとおり、files=の時点のファイル名展開がなっていないようなのですが、 これはなにが原因なのでしょうか? 私の.zshrcで補完に関する部分の記述は、以下のようなものです。 (.zshrcを消去してデフォルト状態に戻しても同じなので、原因がここにはなさそうなのですが) ========================================== autoload -U compinit; compinit -u compinit -u setopt list_packed # 補完リストを詰めて表示 setopt extended_glob # 拡張補完機能 bindkey "^[[Z" reverse-menu-complete # Shift-Tabで補完候補を逆順でたどる setopt nonomatch compdef _files zsh "*.zsh" zstyle ':completion:*:vim:*' ignored-patterns '*?.o' '*?~' '*.exe' '*\#' ===========================================
お礼
ご回答ありがとうございました。 デフォルトだと、やはりファイル名展開がされないようですね。 最適な方法かは分からないのですが、一応自己解決しましたので、 補足に追記させていただきます。 最後までご回答ありがとうございました。
補足
> setopt GLOB_SUBST をzshrc、もしくはzsrenvに追記することで、ワイルドカードが展開されるようです。 ホームディレクトを/home/user1/として、 > file=~/../te*.txt > echo $file /home/user1/../test1.txt /home/user1/../test2.txt > ls $file /home/user1/../test1.txt /home/user1/../test2.txt となり、エラーが表示されなくなりました。 スクリプトとして利用することもあるので、 私の場合は.zshenvの方に上記"setopt GLOB_SUBST"を追記することにしました。