~/.bash_aliasesの私のエイリアスに私が間違っているのでしょうか? [コピー]

~/.bash_aliasesの私のエイリアスに私が間違っているのでしょうか? [コピー]

~/.bashrc

鉱山には~/.bashrc以下が含まれています(基本的に):

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

~/.bash_aliases

鉱山には~/.bash_aliases以下が含まれています(私の定義):

alias define="curl dict://dict.org/d:$1"

予想する

そこにエイリアスがあるので、defineシェル(ターミナル)から直接次のようなものを使用できます。

define internet

dict.orgを見て、インターネットで定義を見つけて私に見せたいです。

何らかの理由でこのタスクを実行するたびに私は次のようになります(paste.debian.netでホストされており、時間が経つと消えることがあります)。


~/.bash_aliases私は会議でソースを見つけようとしますbash


シェル

私はbashDebian Bullseyeでバージョン5.0.11を実行しています(現在テストされており、まもなくメジャーリリースが予定されています)。


私のエイリアスに何が間違っているのでしょうか~/.bash_aliases

答え1

問題は、エイリアスがスクリプトや関数などの位置パラメータを取らないことです。また、bashrcのエイリアスは二重引用符で囲まれているため、パラメータはすぐに拡張されます(空白になります)。したがって、エイリアスはデフォルトで次のように設定されます。

alias define="curl dict://dict.org/d:"

一重引用符を使用してパラメータを正しくエスケープしても、思った\ようにパラメータが渡されません。

define fooたとえばcurl dict://dict.org/d: foo、この方法を使用するには、setを使用してパラメータをシェルパラメータに設定する必要があります。

set -- foo; define

ただし、引数/オプションが必要な場合は、必ず関数を使用することをお勧めします。

define () {
    local word=$1
    curl "dict://dict.org/d:$word"
}

答え2

エイリアスがどのように機能するかはありません。

この機能は比較的強力で、次のように使用できます。

function define(){
  curl "dict://dict.org/d:$1"
}

$1はスクリプトまたは関数のパラメータ1です。

関連情報