【问题标题】:How to convert user input spaces to dashes如何将用户输入空格转换为破折号
【发布时间】:2016-06-17 01:23:28
【问题描述】:

我有一个 bash 脚本,它从以下代码行获取用户输入。

echo "What is the customer name?"
read hostname

当运行脚本的用户回答问题时:

Company A in Texas

如何让脚本将空格转换成这样的破折号?

Company-A-in-Texas

我可以运行处理以对文件执行此操作,但在让脚本执行此操作时我画的是空白。我想我可以将数据发送到标准输出,然后对其进行处理。只是想得到一些其他的想法。

【问题讨论】:

  • 这可以通过tr 轻松完成,但这种转换的目标是什么?用连字符替换空格后,您将如何处理客户名称?如果您要创建文件,则需要做更多的工作来清理用户输入。

标签: bash


【解决方案1】:
$ read -p "What is the customer name? " custname
What is the customer name? Company A in Texas
$ custname=${custname// /-}
$ echo "$custname"
Company-A-in-Texas

我已将 echo 加上 read 替换为 read -p1(用于“提示”)并重命名了您的参数,因为 hostname 是命令的名称,这可能导致混乱。

为了用破折号替换空格,我使用了parameter expansion;注意双斜线以确保所有空格都被替换,而不仅仅是第一个。

1 请注意,-p 选项是 Bash 特定的,而不是为 POSIX shell 指定的。

【讨论】:

  • 如果用户输入已经包含破折号会怎样?它会忽略新的格式吗?最终目标是稍后在脚本中使用破折号创建文件。但如果用户已经包含它们,我不想搞砸。
  • @user53029 它只是用破折号替换每个空格,没有别的。现有的破折号保持不变。
  • 我只是指出,如果社区认为一个问题是好的,那么投票就会来,无需要求他们。我不认为你的问题很可怕,但也不是很好。有很多几乎是重复的,比如this onethis one,这让我怀疑upvote 标准中提到的“研究努力”位。
【解决方案2】:

可以使用tr来完成

tr " " "-" <<< "Company A in Texas"

哪个输出

Company-A-in-Texas

在脚本中添加它:-

#!/bin/bash


echo "What is the customer name?"
read hostname
echo "$hostname" | tr " " "-"

将根据 OP 的需要输出。

【讨论】:

  • 你可以删除设置$var的那一行。
  • 另外,你需要在最后一行用双引号 $hostname,以防用户输入的内容包含 shell globbing 字符。
  • 我也没有。可能有人对某事心烦意乱?这里的字符串或不使用 -r 与 read 或其他什么?
猜你喜欢
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多