【问题标题】:bash script needs to read user input and use it as the argument for another commandbash 脚本需要读取用户输入并将其用作另一个命令的参数
【发布时间】:2015-08-28 07:43:02
【问题描述】:

所以我一直在互联网上寻找答案,但我似乎找不到任何东西。我目前正在使用一个 bash 脚本,我想做的一件事是提示脚本的用户输入一个句子,说明他们使用该脚本的目的是什么,然后将其传递给 CVS。如果你不知道 CVS 是什么,它只是一个脚本控制功能,我使用的 cvs 提交接受一个字符串并将其附加到正在提交的文件中。

我尝试过的基本情况如下:

read -p "Please enter what you did here: "
echo
cvs commit -m '$READ' filename.txt

问题是当我输入一个包含多个单词的字符串时,read 将其解释为传递的多个参数,并将每个单词存储为一个单独的变量,这破坏了我的 cvs 函数。

所以基本上,我如何提示输入字符串并将该输入用作一个变量?

谢谢:)

【问题讨论】:

  • cvs commit -m "$READ" filename.txt 应该可以工作。
  • read -p "Please enter what you did here: " -r READ 然后如anubhava所说,用双引号括起来。
  • @Ryan Cauldwell:你在哪里填写$READ

标签: linux string bash prompt


【解决方案1】:

您没有指定一个变量来保存用户输入的内容,因此默认情况下您的输入以变量REPLY 结束。每个人 bash/read:

如果没有提供名称,则将读取的行分配给变量 REPLY.

在不改变你的阅读语句的情况下,你可以这样做:

echo
cvs commit -m "$REPLY" filename.txt    # double-quote or kill expansion

阅读的正确格式是:

read -p "Please enter what you did here: " SOMEVAR

无论用户输入什么,无论是否有空格,都会以SOMEVAR 结尾。然后你可以:

echo
cvs commit -m "$SOMEVAR" filename.txt    # double-quote or kill expansion

【讨论】:

    【解决方案2】:

    你是说

    read -ep "Please enter what you did here: "
    echo
    cvs commit -m "$REPLY" filename.txt
    

    【讨论】:

    • 来自help read如果没有提供名称,则读取的行存储在 REPLY 变量中。
    【解决方案3】:

    您可以使用读取函数的命令参数-a array

    read -a arr -p "Hello "
    echo ${arr[*]}
    

    【讨论】:

      猜你喜欢
      • 2016-04-07
      • 2022-12-08
      • 2019-01-25
      • 2015-04-29
      • 1970-01-01
      • 2012-03-27
      • 2016-12-27
      • 2014-12-26
      相关资源
      最近更新 更多