提示用户句子并存储,不受空格干扰

提示用户句子并存储,不受空格干扰

我有一个 bash 函数,提示用户输入某些数据。我尝试了名字、姓氏、生日等。

主要用一句话来表示的数据。

当我询问街道+号码时。该函数会中断,因为它无法处理空格。

askForData 'Please enter your street and number' STREET

我收到以下错误。

Please enter your street and number: ExampleStreet 123
func_askForData: line 21: 123: command not found

如何扩展我的功能来接受句子?

文件:func_askForData

#!/bin/bash

# Usage askForData "Prompt for value" VARIABLE
# Prints out prompt and stores input in VARIABLE
# 
# Prompt is printed till non-empty input is made.

function askForData()
{
local PROMPT=${1}
eval local VAR_NAME=${2}

local CONTINUE=true
while ${CONTINUE}
    do
        read -p "${PROMPT}: " VAR_VALUE
        if [ -z "$VAR_VALUE" ]; then
            CONTINUE=true
        else
            CONTINUE=false
            eval ${VAR_NAME}="${VAR_VALUE}"
        fi
    done
}

附加信息

bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
Copyright (C) 2007 Free Software Foundation, Inc.

答案1

使用

eval ${VAR_NAME}='"${VAR_VALUE}"'

使用eval,您通常会得到两倍的扩展。如果语句中有任何内容eval应该只扩展一次,通常最好以这样的方式引用它们,即第一次扩展不执行任何操作(除了删除引号),第二次扩展执行主要工作。在这个具体例子中,第一次展开产生

STREET="${VAR_VALUE}"

然后在第二次扩展期间正确执行。如果你尝试反其道而行之,则很难保证第一次展开的结果在第二次展开时保持不变。

我也有这样的印象:第一个eval(之前)local VAR_NAME=${2}是多余的。

相关内容