環境変数を使用してzshにフラグを保存する方法は?

環境変数を使用してzshにフラグを保存する方法は?

私は一緒に働いていますクベックテルそしてzshでは、名前空間フラグを環境変数に保存したいと思います。

以下を書く代わりに:

kubectl get pods -n mynamespace

私はこのようなことをしたい:

n='-n mynamespace'
kubectl get pods $n

しかし、これを行うと、次のような結果が得られます。

No resources found in  mynamespace namespace.

in単語と間にスペースが2つあることに注意してくださいmynamespace

を実行するとkubectl get pods -n mynamespace正しい出力が得られます。

NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          16m

ここで何が起こるのか?in単語と出力の間にスペースが2つあるのはなぜですかmynamespace?環境変数に名前空間フラグを格納するには?

ベストアンサー1

zsh は変数に対してトークン化を実行しませんが、その値を単一の引数として渡します。これにはkubectlはありませんが、mkdirなどの項目を使用して動作を再現できます。

var='-p a/b/c/d'
comp% mkdir $var
mkdir: invalid option -- ' '
Try 'mkdir --help' for more information.

以下を使用して同じエラーを呼び出すことができます。

comp% mkdir '-p a/b/'
mkdir: invalid option -- ' '
Try 'mkdir --help' for more information.

zshが実際に何をしているのかを見ることができますstrace -f mkdir $var

execve("/usr/bin/mkdir", ["mkdir", "-p a/b/c/d"], 0x7ffce5e6afb0 /* 61 vars */) = 0

提案に従ってくださいこの回答では たとえば、単語分割を有効にする必要があります。

comp% mkdir -p ${=var}

あなたの場合は次のとおりです。

kubectl get pods ${=n}

おすすめ記事