![パスを後ろに歩き、パスを変数に保存する方法[冗長]](https://linux33.com/image/216503/%E3%83%91%E3%82%B9%E3%82%92%E5%BE%8C%E3%82%8D%E3%81%AB%E6%AD%A9%E3%81%8D%E3%80%81%E3%83%91%E3%82%B9%E3%82%92%E5%A4%89%E6%95%B0%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%5B%E5%86%97%E9%95%B7%5D.png)
変数にパスを保存したとします。
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
結果をグローバル変数に割り当てる関数のバージョンが__
より良いが、より冗長になる。