fish でコマンドライン引数に別コマンドの実行結果を展開
fish の便利そうな機能を見つけました
今まで使ってきておいて今更?感ありますけど

command1 a(command2)b

のようにすると () の中が command2 の出力を行ごとに置き換えたものになって command1 のコマンドライン引数になります

例えば a.txt に foo,bar,baz の 3 行を入れておき Node.js で引数を配列形式で表示してみると

> cat a.txt
foo
bar
baz
> node -p "process.argv.slice(1)" aaa(cat a.txt)bbb
[ 'aaafoobbb', 'aaabarbbb', 'aaabazbbb' ]

スペースを含めたい場合に "" で全体を囲むと () の中身が文字列扱いでコマンド実行されないので () の前後に "" を書きます

> node -p "process.argv.slice(1)" (cat a.txt)" xyz"
[ 'foo xyz', 'bar xyz', 'baz xyz' ]

連番のファイルをここからここまでで指定して消すのにも使えますね
seq コマンドを使うとこういう結果を得られるので

> seq -w 88 102
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102

こういうコマンドで 088.jpg ~ 102.jpg というファイルを削除できます

> rm (seq -w 88 102).jpg

また * とも組み合わせられるので こういうファイルリストがあったときに

01-foo.txt
02-bar.txt
02-bar.html
03-baz.txt
03-baz.js
04-qux.txt

01 ~ 03 の .txt ファイルだけを指定したい場合にはこう書けます

> echo (seq -w 03)*.txt
01-foo.txt 02-bar.txt 03-baz.txt

似た感じの展開で {} を使って「,」区切りで書いた文字列を展開する機能もあります

> echo tmp{0,1,2}
tmp0 tmp1 tmp2

これは bash でも使えて以前から使うことはあったのですが () を使ってコマンドの出力を展開する機能は bash だとシンタックスエラーでした
shell の機能としてないのかもです
xargs でできそうと思いましたが 各行の前後に固定のテキストを追加しないといけないですし 私が知る限りでは fish ほど簡単にはできなそうでした
fish で export を追加する
fish で環境変数を追加したいことがときどきあるけどよくやり方忘れてるのでメモ

~/.config/fish/config.fish

に設定を追加すればいいだけなんだけど 自分で作らないとこのファイル自体がなくて名前が config.fish だっけ fish.config だっけで迷う

fish では永続する環境変数をコマンドで作れるのでこっちのほうが楽
set -U で fish_user_paths に追加する
ユニバーサル変数って名前らしい

nodebrew の例
インストールしたら下を追加してくださいって指示が出る

export PATH=$HOME/.nodebrew/current/bin:$PATH

fish ではこのコマンドをうつ

set -U fish_user_paths $HOME/.nodebrew/current/bin $fish_user_paths

$PATH の代わりが $fish_user_paths でちょっと長い
このコマンドで設定したのは自動で生成される設定ファイルに追加されてる

.config/fish/fishd.0a0027000002

の最後に

SET fish_user_paths:/home/user/\x2enodebrew/current/bin

が増えてた

自動生成される設定ファイルの名前は環境によって違う
0a00~の部分は MacAddress らしい
自動生成ファイルはユーザが変更しても再作成でもとに戻るので直接書くのはダメ
ファイルの最初にも注意書きあり

# This file is automatically generated by the fish.
# Do NOT edit it directly, your changes will be overwritten.