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つを私に説明してもらえますか?
d=$d/..
sed 's/^\///'
d=..
これをしてはいけない理由:
up()
{
limit=$1
for ((i=1 ; i <= limit ; i++))
do
cd ..
done
}
使用法:
<<<>>>~$ up 3
<<<>>>/$
ベストアンサー1
d=$d/..
/..
変数に追加された現在の内容d
。d
何もせずに開始し、最初の反復が成功し、/..
2回目の反復/../..
などが続きます。sed 's/^\///'
最初のものを削除して/
ください/../..
(../..
パラメータ拡張を使用して実行できますd=${d#/}
)。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を使うjot
(athena-jot
Debianのパッケージ):
up() { cd $(jot -b .. -s / "${1:-1}"); }