• ..

AWS

    bash と fish 変換

    変数

    変数がなかったらデフォルト値を使う

    bash の場合

    foo=${HOGE:-123}
    # foo = 123
    bar=${HOME:-123}
    # bar = /Users/user

    fish の場合

    set -q HOGE; and set -l foo $HOGE; or set -l foo 123
    # foo = 123
    set -q HOME; and set -l bar $HOGE; or set -l foo 123
    # bar = /Users/user

    都度追記

    前回のコマンドの一部を書き換えて実行

    引数が似たようなコマンドを複数実行したい場合とかあると思います。そういう時は以下のように実行すると書き換えたコマンドを実行できます。

    echo nju_nju
    # nju3_nju3
    history | sed -n 1p | string replace -a nju 純
    # echo 純_純

    これはecho nju_njuを最初実行した後、これをecho 純_純と変換して表示するコマンドです。
    string replaceは文字を置き換えるためのfishコマンドで、最初の文字列を後の文字列に変換できます。また、-a--allオプションを使うことですべてのマッチする文字列を後に指定した文字列に変換できます。

    ただしこれはまだ変換したコマンドを表示しているだけなので、それを実行する為にevalを使います。

    echo nju_nju
    # nju3_nju3
    eval (history | sed -n 1p | string replace -a nju 純)
    # 純_純

    純_純と得れました。

    ちなみにsed -n 1pの部分を2p3pと変更すると、2つ前や3つ前のコマンドを置換したものを実行できたりもします。