パスを後ろに歩き、パスを変数に保存する方法[冗長]

パスを後ろに歩き、パスを変数に保存する方法[冗長]

変数にパスを保存したとします。

tmp=/home/abc/xyz

だから私が今欲しいのは、一歩後退して変数に保存することです。

tmp2=/home/abc

エラーなしでこれを達成する方法を教えてください。

答え1

職業のようですねdirname。ファイル/ディレクトリが存在する必要はなく、エラーが発生しないように最後の部分だけを切り捨てます。/帰ってきたからです/

tmp2="$(dirname -- "$tmp")"

答え2

デリゲートdirname。これを行うには、パスが空ではなく相対パスであってはなりません。

tmp2=$(set -f; IFS=/; set -- $tmp; echo "/${*:1:$# ? $# - 1: 0}")

とにかく、私はサブシェルを使用するのが好きではありません。したがって、dirname結果をグローバル変数に割り当てる関数のバージョンが__より良いが、より冗長になる。

関連情報