zshの関数変数のオプションと一緒にコマンドを保存するには?

zshの関数変数のオプションと一緒にコマンドを保存するには?

bashスクリプトを使用して学習しようとしています。YouTubeのfreeCodeCamp初心者チュートリアル

彼がどのように関数を作るかを示す部分で詰まった。彼は変数のオプションと一緒にコマンドを保存します。

#!/bin/bash

showuptime(){
    up=$(uptime -p | cut -c4-)
    since=$(uptime -s)
    cat << EOF

----------
This machine has been up for ${up}
It has been running since ${since}
----------

EOF
}

showuptime

端末からzshを使用してMacBook M1にコピーすることはできません。

私は使用中で、#!/bin/zsh -pと-sオプションを渡さない場合にのみ機能します。

間違い:

uptime: illegal option -- p
usage: uptime
uptime: illegal option -- s
usage: uptime

答え1

いくつかを明確にするには:

  • 変数として~のなどを介してアクセスできる関数に渡された引数(ここにはありません)を持つ関数を表示することをお勧めします$1$2
  • あなたが持っているすべては変数です存在するタグ付けされていないため、localその機能に限定されません。
  • この$( )構造はコマンドの置き換え。何らかの方法でコマンドを保存せずにその中の内容を実行し(uptime -p | cut -c4-最初の場合)、コマンドによって生成された出力を変数に割り当てます。uptimeこの時点でコマンドが実行されます。コマンド以外のコマンド出力が保存されます。
  • Marcusが述べたように、エラーはuptimeこれらのオプションをサポートしていないコマンドで発生します。 Mac OSはBSDに関連しているので、FreeBSDはマニュアルページuptime方向を示すことができます。 FreeBSDではuptimeオプションはまったく許可されておらず、Mac OSでも同様です。
  • 質問のタイトルに答える:オプションでコマンドを保存する最善の方法は、配列を使用することです。my_stored_command=(ls -lt --human-readable /home)その後、後で実行して"${my_stored_command[@]}"配列を個々の要素に拡張し、コマンド呼び出しを再設定できます。

関連情報