将bash字符串操作的输出分配给变量
在Ubuntu 16.04上,我有一个bash脚本,我以root用户身份运行。我想删除用户输入中的所有空格,并将修剪后的字符串指定给变量将bash字符串操作的输出分配给变量,bash,sed,ubuntu-16.04,Bash,Sed,Ubuntu 16.04,在Ubuntu 16.04上,我有一个bash脚本,我以root用户身份运行。我想删除用户输入中的所有空格,并将修剪后的字符串指定给变量 read -p "Enter username: " USERNAME echo "$USERNAME" | sed s/' '/''/g TRIM="$USERNAME" | sed s/' '/''/g echo $TRIM echo "Done" 以下是一些示例输入和输出: 输入用户名:hjkl hjkl 完成 $TRIM为空。 要获得$TRIM以包含
read -p "Enter username: " USERNAME
echo "$USERNAME" | sed s/' '/''/g
TRIM="$USERNAME" | sed s/' '/''/g
echo $TRIM
echo "Done"
以下是一些示例输入和输出:
输入用户名:hjklhjkl 完成 $TRIM为空。
要获得$TRIM以包含结果,我需要做什么更改?使用
$()
捕获命令的输出
trim=$(echo "$USERNAME" | sed 's/ //g')
但是,您不需要命令,可以使用bash
进行替换
trim=${username// /}
注意:不要使用大写变量名,它们通常是为环境变量保留的。使用$()
捕获命令的输出
trim=$(echo "$USERNAME" | sed 's/ //g')
但是,您不需要命令,可以使用bash
进行替换
trim=${username// /}
注意:不要使用大写变量名,它们通常是为环境变量保留的。脚本中有几点需要注意。
首先,像
USERNAME
这样的大写标识符通常是为环境变量保留的。因此,您可能会意外地重写一个shell变量,从而导致不期望的效果。TRIM
的情况也是如此
其次,您应该使用内置的shell
检查Ubuntu发行版中的默认shell。做点像
echo $SHELL
如果输出为dash
或bash
,则可以使用命令替换来实现目标
trim=$(echo "$username" | sed 's/ //g')
请注意,sed
命令本身应该放在单引号下。当您回显
trim
时,请使用双引号防止像
echo "$trim" # In your case though the double quotes doesn't make any difference
在脚本中有几件事你应该注意。
首先,像
USERNAME
这样的大写标识符通常是为环境变量保留的。因此,您可能会意外地重写一个shell变量,从而导致不期望的效果。TRIM
的情况也是如此
其次,您应该使用内置的shell
检查Ubuntu发行版中的默认shell。做点像
echo $SHELL
如果输出为dash
或bash
,则可以使用命令替换来实现目标
trim=$(echo "$username" | sed 's/ //g')
请注意,sed
命令本身应该放在单引号下。当您回显
trim
时,请使用双引号防止像
echo "$trim" # In your case though the double quotes doesn't make any difference
如果我使用bash参数扩展操作符,我会得到
/trim.sh:3:./trim.sh:Bad substitution
,那么您并没有真正使用bash
。请参阅@JamesNewton:You可能缺少echo
@sjsam在他得到错误的命令中没有echo
。@sjsam内部有引号:s/'/'/'/g
但是第二个引号是不需要的。如果我使用bash参数展开运算符,我得到了/trim.sh:3:./trim.sh:Bad substitution
那么你就没有真正使用bash
。请参阅@JamesNewton:You可能缺少echo
@sjsam他从中得到错误的命令中没有echo
。@sjsam内部有引号:s/'/'/'/g
,不过第二个引号是不需要的。实际上引号起了很大作用。如果用户输入一个包含shell通配符或不规则空格的表达式,没有引号的程序将使输出混乱。事实上引号起了很大的作用。如果用户输入包含shell通配符或不规则空格的表达式,则不带引号的程序将使输出混乱。