シェルでこれを行うと、!!
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」セクションで
デフォルトでは、非対話型シェルは履歴拡張を実行しません。