• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:zshのワイルドカード展開について)

zshのワイルドカード展開について

このQ&Aのポイント
  • zshのワイルドカード展開について初歩的な質問ですが、ホームディレクトリの親ディレクトリ内に作成したファイルをlsコマンドで表示しようとすると、エラーが表示されます。
  • zshrcの設定を確認しても展開されないため、zshのワイルドカード展開方法が特殊な可能性があります。
  • 他のシェルではワイルドカードが展開される一方、zshではワイルドカード展開がうまく機能しない問題が発生します。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

zshは、変数への代入の右辺では、ファイル名展開が行われないようですね。 何かオプションが無いかと、man zshexpn を見てみましたが、よくわかりません。 とりあえずでよければ、 files=$(echo ~/../te*.txt)

jshannon9
質問者

お礼

ご回答ありがとうございました。 デフォルトだと、やはりファイル名展開がされないようですね。 最適な方法かは分からないのですが、一応自己解決しましたので、 補足に追記させていただきます。 最後までご回答ありがとうございました。

jshannon9
質問者

補足

> 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"を追記することにしました。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

今、動作確認できないのですが。  > files=~/../te*.txt このあと、 echo $files したらどうなります? 念のため。 ファイル名展開は、files=の時点で行われます。lsは、その展開されたファイル名一覧を引数にもらうだけで、*等の展開は行いません そのエラーメッセージからすると、zshでは echo $files でその入力されたままの~/../te*.txt が出力されると思います。

jshannon9
質問者

お礼

ご回答ありがとうございます。 補足に間違いがありました。失礼しました。 .zshrc内の2行目 compinit -u は1行目と重複しているので不必要でした。

jshannon9
質問者

補足

ご回答ありがとうございます。 ホームディレクトリを/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' '*\#' ===========================================

関連するQ&A