変数にパスを保存したとします。
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
結果をグローバル変数に割り当てる関数のバージョンが__
より良いが、より冗長になる。