bash関数はコマンドライン引数のスペースを処理します。

bash関数はコマンドライン引数のスペースを処理します。

常に1つのディレクトリに移動またはc d..入力してください。c d ..

私の.bash_profileに以下の関数を入れると、パラメータセット全体()ではなく、スペースの前の最初の文字「c」だけが解釈されますc d..。この文字は2つだけあるべきだと思います。エラー発生

bash: c: - command not found

バッシュ4.2.46から。

コマンドラインでスペースを使用してパラメータを解釈すると、後で使用することができるので、この問題を解決したいと思いました。

機能:

changedir() {  
    if [[  $@ = "c d.." ]]; then  
        command cd ..  
    else  
if [[  $@ = "c d.." ]]; then  
        command cd ..  
    fi   
fi   
}

また、スペースを含む完全な引数文字列を使用することをお勧めします: $* または $@

答え1

さて、関数名は、changedirシェルがコマンドを受け取ったときにのみ実行されるように指定されましたchangedir [whatever]。コマンドが実行されるたびに実行されるわけではありません。入力したコマンドラインごとに関数を実行するためにトラップを乱用する可能性がありますが、DEBUGここではそうする必要はありません。

代わりに、引数または引数が与えられたときに実行されるc関数を生成してください。cd ..d..d..

c() {
    if [[ $1 = 'd..' ]] ||
       [[ $1 = 'd' && $2 = '..' ]]; then
        command cd -- ..
    else
        echo "Invalid arguments to 'c'! Only 'c d..' and 'c d ..' are supported." >&2
    fi 
}

またはBashで使用できますshopt -s autocd。これにより、ディレクトリ名のみを指定すると、シェルはそのディレクトリに移動します。したがって、foobar同じ操作が実行されcd foobar(コマンドがない場合foobar)、..ディレクトリのみが入力されます。

関連情報