より良いもの

より良いもの

function私のファイルにコピーがあります.bashrc。私はそれが何をしているのか知っています。 Xディレクトリを追加します。cd

ここにいる:

up()
{
    local d=""
    limit=$1
    for ((i=1 ; i <= limit ; i++))
      do
        d=$d/..
      done
    d=$(echo $d | sed 's/^\///')
    if [ -z "$d" ]; then
      d=..
    fi
    cd $d
}

しかし、これら3つを私に説明してもらえますか?

  1. d=$d/..
  2. sed 's/^\///'
  3. d=..

これをしてはいけない理由:

up()
{
    limit=$1

    for ((i=1 ; i <= limit ; i++))
    do
        cd ..
    done
}

使用法:

<<<>>>~$ up 3
<<<>>>/$

ベストアンサー1

  1. d=$d/../..変数に追加された現在の内容dd何もせずに開始し、最初の反復が成功し、/..2回目の反復/../..などが続きます。

  2. sed 's/^\///'最初のものを削除して/ください/../..(  ../..パラメータ拡張を使用して実行できますd=${d#/})。

  3. d=..その条件の文脈でのみ意味があります。

    if [ -z "$d" ]; then
      d=..
    fi
    

    これにより、dこの時点で空の場合は親ディレクトリにリダイレクトされます。 (upパラメータのないものと同じですcd ..。)

このアプローチは、ある段階で(ユーザーの観点から)以前のディレクトリに戻ることができる機能を維持するため、繰り返しcd ..よりも優れています。cd -

この機能は次のように単純化できます。

up() {
  local d=..
  for ((i = 1; i < ${1:-1}; i++)); do d=$d/..; done
  cd $d
}

これは、少なくとも1つのレベルを上回って追加したいと仮定します。n-1/レベルなので、先行を削除したり空であることを確認する必要はありません$d

Athenaを使うjotathena-jotDebianのパッケージ):

up() { cd $(jot -b .. -s / "${1:-1}"); }

(目安として変形次の提案グレンジャックマン)。

おすすめ記事