私はbashの代替としてFish Shell 2.0を使用しようとしています。次のbash関数をFish関数に変換しようとしていますが、本当に不便です。似たような機能がいくつかあるので、誰もが例えば正しい方向を教えてくれたら、本当に感謝します。
connect() {
if [ "$2" != "" ]
then
ssh -ti ~/.ssh/work/id_rsa user@host$1.domain.com "sudo ssh $2"
fi
if [ "$2" == "" ]
then
ssh -ti ~/.ssh/work/id_rsa user@host$1.domain.com "sudo -i"
fi
}
$1と$2を$argv[1]と$argv[2]に置き換えようとしましたが、ブロックの終わりが見つからないと文句を言いました。私は魚のスクリプトの構文が非常に異なるので、それを知っています。私はもっと簡単な関数で始めましたが、1つの変数が渡された場合は1つのタスクを実行し、2つの変数が渡された場合は別のタスクを実行する方法を見つけるのが困難です。
function testvarz
switch "$argv[2]";
case ""
echo "no second variable passed"
case != ""
echo "second variable passed"
end
end
しかし、これはうまくいきません。 2つの変数を渡すと何もせず、1を渡すと文句を言います。
答え1
これはテスト機能と同様の操作機能です。
function testvarz
switch (count $argv)
case 0
echo 'zero'
case 1
echo "one $argv[1]"
case 2
echo "two $argv[1] $argv[2]"
case '*'
echo 'else'
end
end
関数に同様の構造を使用できますconnect
。
ところで、null$#
に依存するのではなく、Bash関数で同様のものを使用する必要があります$2
。case
Bashでステートメントを使用することもできます。