[ -f /root/.bash_aliases ] || echo "$_"
私にください]
私の考えでは/root/.bash_aliases
私も試しました
[ -f /root/.bash_aliases ] || echo !:2
しかし、それは私に次のような結果を与えます
[ -f /root/.bash_aliases ] || echo /root/.bash_aliases
/root/.bash_aliases
私はほしいだけです。/root/.bash_aliases
ベストアンサー1
この機能の目的は次のとおりです。
print_if_not_regular() {
[ -f "$1" ] || printf '%s\n' "$1"
}
print_if_not_regular /root/.bash_aliases
一部のシェルには匿名機能があるか、次の機能がありますes
。zsh
(){[ -f "$1" ] || printf '%s\n' $1} /root/.bash_aliases # zsh
@ {[ -f $1 ] || printf '%s\n' $1} /root/.bash_aliases # es
$_
たとえば、DEBUGトラップがあると動作しなくなります。
$ bash -c 'trap ": \"\$((cmdcount+=1))\"" DEBUG; echo foo; echo "$_"'
foo
2
これは!:n
最後のコマンドのn番目の引数ではなく、前のコマンドラインのn番目の語彙トークンです(記録の最後の行(および複数行)に格納されています)。例えば、
echo $(echo A B)
echo foo; echo !:1
(最後のコマンドの最後の引数)または(前のコマンドラインのコマンドの最後の引数)!:1
に拡張されず、代わりに拡張されます。ここに次のように入力する必要があります。foo
B
echo
echo
$(echo A B)
[ -f /root/.bash_aliases ] ||
echo !:2
つまり、別の行に入力します。ここでは、2行目を入力したときに履歴行が完全に終了していなくても(偶然に)機能します。同じトリックが(t)csh
(歴史的拡張のソース)では機能しませんzsh
。