我正在尝试input
在 Bash 中编写一个简单的 Python函数。
Python 脚本中的示例如下所示:
s = input('Please input something: ')
我想对 Bash 等效项的调用如下所示:
s=$(input "Please input something: ")
这是我写的实现:
function input {
# $1 is the prompt passed as an argument; in my above example,
# it would be 'Please input something: '
printf "%s" "$1"
read in
echo "${in}"
return 0
}
随着调用s=$(input "Please enter something: ")
,提示永远不会打印;相反,Bash 脚本只是等待用户输入而不显示文本。按 Enter 键,即不提供任何输入,将设置s
为提示本身。似乎正在发生的是s
捕获 line 的输出printf "%s" "$1"
,然后读取它也回显的输入。我也试过明确地将提示指向stdout
with printf "%s" "$1" >&1
,但无济于事。
如何先打印提示,然后捕获输入并将其回显给调用函数?
你很幸运。它已经以 的形式存在read -p
。
read -p 'Please input something: ' s
为了安全起见,使用IFS=
和-r
也是一个好主意。IFS=
确保保留前导和尾随空格。-r
保留反斜杠,因此\n
不会被解释为换行符,或\\
变成\
.
IFS= read -rp 'Please input something: ' s
至于为什么你的函数不起作用,那是因为提示被打印到标准输出,它被捕获。打印到 stderr 以使其显示。
input() {
printf "%s" "$1" >&2
read in
printf '%s\n' "$in"
}
细心的编剧会用printf '%s\n'
到位的echo
。如果用户键入-n
或-e
您希望打印这些内容,则不会解释为选项。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句