将bash字符串操作的输出分配给变量

时间:2017-11-23 20:02:28

标签: bash sed ubuntu-16.04

在Ubuntu 16.04上,我有一个以root身份运行的bash脚本。我想从用户的输入中删除所有空格,并将修剪后的字符串分配给变量。

read -p "Enter username: " USERNAME
echo "$USERNAME" | sed s/' '/''/g
TRIM="$USERNAME" | sed s/' '/''/g
echo $TRIM
echo "Done"

以下是一些示例输入和输出:

  

输入用户名:h j k l
  hjkl

     

完成

$ TRIM是空的。
为了获得$ TRIM来包含结果,我需要做出哪些改变?

2 个答案:

答案 0 :(得分:4)

使用$()捕获命令的输出。

trim=$(echo "$USERNAME" | sed 's/ //g')

但是,您不需要为此命令,您可以使用bash parameter expansion operator进行替换。

trim=${username// /}

P.S。不要使用大写变量名,它们通常是为环境变量保留的。

答案 1 :(得分:1)

您应该在脚本中注意几件事。

首先,像USERNAME这样的大写标识符通常是为环境变量保留的。因此,您可能会意外地覆盖shell变量,从而导致意外的影响。 TRIM的情况也是如此。

其次,您应该使用内置的SHELL检查Ubuntu发行版中的默认shell。做点什么

echo $SHELL

如果输出为dashbash,您可以使用命令替换来实现目标。

trim=$(echo "$username" | sed 's/ //g')

请注意sed命令本身应该放在单引号下。

当您回显trim时,请使用双引号来阻止分词,如

echo "$trim" # In your case though the double quotes doesn't make any difference