사용자에게 입력하려는 날짜를 묻고 싶습니다. 그러면 응답을 읽은 다음 입력한 내용에 따라 디렉토리로 이동합니다.
대부분 오늘 날짜가 될 것 같아요. 할 수 있을까요?
echo "What date would you like?"
read date
그런 다음 현재 날짜를 명령줄에 출력하여 Enter 키를 누르거나 백스페이스하여 지난 달로 변경할 수 있습니다. 예를 들어?
답변1
쉘 사용 zsh
:
zmodload zsh/datetime
strftime -s date %F $EPOCHSECONDS
set -o emacs
vared -p 'What date would you like? ' date
(
또는 다음과 함께 프롬프트 확장을 사용합니다 print -P
.
print -rPv date '%D{%F}'
set -o emacs
vared -p 'What date would you like? ' date
또는 (빠른 확장을 위한 다른 (그리고 오래된) 방법):
date=${(%):-%D{%F}}
set -o emacs
vared -p 'What date would you like? ' date
)
vared
ed
iable 에 내장된 명령입니다 var
.
쉘 사용 fish
:
fish_default_key_bindings
read -c (date +%F) -P 'What date would you like? ' date
쉘 사용 ksh93
:
date=${ printf '%(%F)T' now; }
set -o emacs
IFS= read -rv 'date?What date would you like? '
쉘 사용 bash
:
printf -v date '%(%F)T' -1
set -o emacs
IFS= read -rei "$date" -p 'What date would you like? ' date
모두는 라인 편집기에 현재 날짜를 미리 설정하고 이를 편집할 수 있도록 합니다(emacs 스타일 키 바인딩 사용, 스타일을 선호하는 경우 emacs
/ default
로 교체 ).vi
vi
여기 %F
(의 약어 )는 국제 형식으로 날짜를 제공하는 %Y-%m-%d
표준 지침입니다 . 자세한 내용은 매뉴얼 페이지를 참조하세요.strftime()
YYYY-MM-DD
strftime(3)
여러 줄 변수를 편집하려는 경우 zsh
및 접근 방식 만 제대로 작동합니다.fish
답변2
이건 어때:
read -p "What date would you like (Press enter for today)? " user_date
date="${user_date:-$(date +%Y%m%d)}"
echo "Chosen date is: $date"
실제 날짜 형식( %Y%m%d
)은 사용자가 결정합니다.
답변3
Bash를 사용하는 경우 read
이것이 내장되어 있는지 명시하지 마십시오.
read -ei "$( date +%F )" -p 'What date would you like? ' USER_DATE
echo "You chose ${USER_DATE}"
설명:
-e Use readline for input.
-i Specify how to pre-fill the buffer.
-p Provide a prompt to the user.
물론 사용자가 유효한 날짜를 입력했는지 확인하기 위해 오류 검사를 포함해야 합니다 date
. 하지만 매우 유연하기 때문에 자체적으로 사용할 수 있지만 '03-01-2021'은 의미하므로 로케일에 주의하세요. 미국(2021년 3월 1일)에서는 다른 지역(2021년 1월 3일)과 다릅니다. YYYY-MM-DD 형식을 사용하는 것은 전 세계 어디에서나 작동할 가능성이 높습니다.
대안으로, GUI를 선호한다면 시스템에 내장되어 있거나 표준 저장소에서 사용할 수 있는 Zenity 또는 Yad와 같은 것을 사용할 수 있습니다(스냅으로도 사용 가능).
Zenity를 사용하려면 다음과 같은 작업을 수행할 수 있습니다(Bash 구문이 표시됨).
function findUserDate
{
declare -gr USER_DATE="$(
zenity --entry --title='Date query' --text='What date would you like?' --entry-text="$( date +%F )"
)"
[[ -z ${USER_DATE} ]] && exit 2
echo "You chose ${USER_DATE}"
}