なぜ戦わないのですか! !非対話型作業? [コピー]

なぜ戦わないのですか! !非対話型作業? [コピー]

シェルでこれを行うと、!!bash変数に最後のコマンドが含まれていることがわかります。

$> echo foo
foo
$> echo !!
echo echo foo
echo foo

しかし、このスクリプトは

#!/bin/bash

mkdir /path/doesnt/exist ||
{
    echo "Could not !!";
    exit 1;
}

出力

mkdir: cannot create directory ‘/path/doesnt/exist’: No such file or directory
Could not !!

私の予想結果はCould not mkdir /path/doesnt/exist

これがうまくいかない理由と回避策は何ですか?

答え1

!!これはbash履歴を読み取るコマンドであり、bash履歴は対話型モードでのみ使用されるためです。

現実的には、すべてのスクリプトがコマンド履歴を埋めることを望んでいません。

bash マニュアルの「History Expansion」セクションで

デフォルトでは、非対話型シェルは履歴拡張を実行しません。

関連情報