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[@]}"배열을 개별 요소로 확장하고 명령 호출을 다시 구성할 수 있습니다.

관련 정보