답변:
당신이 사용할 수있는 매개 변수 확장의 예를
read -p "Enter your name [Richard]: " name
name=${name:-Richard}
echo $name
대괄호 사이의 프롬프트에 기본값을 포함시키는 것은 일반적인 관례입니다.
name=${!input:-$name}
할 것인가?
$1
가된다${1:-some_default_string}
read -e -p "Enter Your Name:" -i "Ricardo" NAME
echo $NAME
-e
필수 것으로 보인다 허용하는 -i
실제 작업에
배쉬 4에서 :
name="Ricardo"
read -e -i "$name" -p "Please enter your name: " input
name="${input:-$name}"
프롬프트 뒤에 다음과 같이 이름이 표시됩니다.
Please enter your name: Ricardo
이름 끝에 커서를 놓고 사용자가 편집 할 수 있도록합니다. 마지막 행은 선택 사항이며 사용자가 입력 또는 기본값을 지우면 (널 제출) 이름이 원래 기본값이됩니다.
name
대신 대신 사용 input
하십시오 read
.
$name
사용자가 제안 된 값을 삭제하여 null 문자열을 입력하면 값이 유지됩니다. 그것은 모두 당신의 필요에 달려 있습니다. 나는 내 대답에서 많이 말했다. 그러나 당신은 더 명확 할 수 있고 선택적 라인을 사용하지 않으면 변수가 될 수 있다고 말했습니다 name
.
암호:
IN_PATH_DEFAULT="/tmp/input.txt"
read -p "Please enter IN_PATH [$IN_PATH_DEFAULT]: " IN_PATH
IN_PATH="${IN_PATH:-$IN_PATH_DEFAULT}"
OUT_PATH_DEFAULT="/tmp/output.txt"
read -p "Please enter OUT_PATH [$OUT_PATH_DEFAULT]: " OUT_PATH
OUT_PATH="${OUT_PATH:-$OUT_PATH_DEFAULT}"
echo "Input: $IN_PATH Output: $OUT_PATH"
샘플 실행 :
Please enter IN_PATH [/tmp/input.txt]:
Please enter OUT_PATH [/tmp/output.txt]: ~/out.txt
Input: /tmp/input.txt Output: ~/out.txt
이 질문을 발견하여 다음과 같은 것을 제시하는 방법을 찾았습니다.
Something interesting happened. Proceed [Y/n/q]:
위의 예제를 사용하여 이것을 추론했습니다.
echo -n "Something interesting happened. "
DEFAULT="y"
read -e -p "Proceed [Y/n/q]:" PROCEED
# adopt the default, if 'enter' given
PROCEED="${PROCEED:-${DEFAULT}}"
# change to lower case to simplify following if
PROCEED="${PROCEED,,}"
# condition for specific letter
if [ "${PROCEED}" == "q" ] ; then
echo "Quitting"
exit
# condition for non specific letter (ie anything other than q/y)
# if you want to have the active 'y' code in the last section
elif [ "${PROCEED}" != "y" ] ; then
echo "Not Proceeding"
else
echo "Proceeding"
# do proceeding code in here
fi
누군가가 같은 문제가 발생하면 논리를 생각할 필요가 없도록 돕는 희망
name=Ricardo
echo "Please enter your name: $name \c"
read newname
[ -n "$newname" ] && name=$newname
기본값을 설정하십시오. 그것을 인쇄하십시오; 새로운 가치를 읽습니다. 새 값이 있으면 기본값 대신 사용하십시오. 프롬프트 종료시 개행을 억제하는 방법에 대한 쉘과 시스템간에 약간의 변형이 있습니다. '\ c'표기법은 3.x bash가있는 MacOS X 10.6.3에서 작동하는 것으로 보이며 Bourne 또는 Korn 쉘을 사용하여 System V에서 파생 된 대부분의 Unix 변형에서 작동합니다.
또한 사용자는 아마도 무대 뒤에서 무슨 일이 일어나고 있는지 알지 못할 것입니다. 새로운 데이터는 이미 화면에 표시된 이름 뒤에 입력됩니다. 형식을 지정하는 것이 좋습니다.
echo "Please enter your name ($name): \c"
printf
보다 더 휴대용echo
if (test -z "$xxx"); ...
'와 다른 C 쉘을 고치는 것에 지쳤다.
\c
때문에 bash가 지원한다는 사실에 놀랐 습니다 echo -n
! 그러나 -e
탈출을 해석하기 위해 bash의 에코를 얻으려면 추가해야합니다 . 나는 \c
말하지 않은 것들을위한 것 같다 :echo -e "Syntax slightly off\c, but I've learned so much from what you've shared. Thanks, @JonathanLeffler!"
#Script for calculating various values in MB
echo "Please enter some input: "
read input_variable
echo $input_variable | awk '{ foo = $1 / 1024 / 1024 ; print foo "MB" }'
-e 및 -t 매개 변수는 함께 작동하지 않습니다. 나는 몇 가지 표현을 시도했고 결과는 다음 코드 스 니펫이었습니다.
QMESSAGE="SHOULD I DO YES OR NO"
YMESSAGE="I DO"
NMESSAGE="I DO NOT"
FMESSAGE="PLEASE ENTER Y or N"
COUNTDOWN=2
DEFAULTVALUE=n
#----------------------------------------------------------------#
function REQUEST ()
{
read -n1 -t$COUNTDOWN -p "$QMESSAGE ? Y/N " INPUT
INPUT=${INPUT:-$DEFAULTVALUE}
if [ "$INPUT" = "y" -o "$INPUT" = "Y" ] ;then
echo -e "\n$YMESSAGE\n"
#COMMANDEXECUTION
elif [ "$INPUT" = "n" -o "$INPUT" = "N" ] ;then
echo -e "\n$NMESSAGE\n"
#COMMANDEXECUTION
else
echo -e "\n$FMESSAGE\n"
REQUEST
fi
}
REQUEST
;)
입니다. SO에서도 허용됩니다! 그러나 우리는 다른 질문들을 관련없는 것들로 오염시키고 싶지 않습니다.
input
사용name=${input:-$name}
합니다.