在 bash 中编写等效于 Python 的输入函数

人士

我正在尝试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",然后读取它也回显的输入。我也试过明确地将提示指向stdoutwith 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章