私の関数でスペースを使用できないのはなぜですか? (CD、ディレクトリ名) [重複]

私の関数でスペースを使用できないのはなぜですか? (CD、ディレクトリ名) [重複]

私はこの機能を持っており、定期的に使用していて、とても素敵に動作します。

ここにいる:

cdx () { cd `dirname $1` ; }

しかし、スペースでは動作しません。このように使ってみると

cdx ~/desktop/folder/file\ file

それは戻ってくる

usage: dirname path

しかし、私が渡したいのは本質的にdirname path。では、この問題を解決するにはどうすればよいですか? (フォルダ名にスペースがある場合も同様です。)

私の最初の考えは引用符を使用することでしたが、 cdX "directory\ whatever"それも機能しませんでした。

答え1

簡単に書くと、$i空白は変数の内容を複数の引数に変換します。スペースを維持するには、何かを引用する必要があります。

たとえば、次のことができます。

cdx () { cd -- "$(dirname -- "$1")" ; }

そして覚えていつも変数を参照してください。

関連情報