为什么要将双引号转换为单引号?

时间:2016-11-23 06:47:28

标签: linux bash

我写了一个简单的测试脚本,其代码如下

#!/bin/bash
CHM=test
NAME="user@test"
if ! grep -q test /etc/passwd
then
        useradd -s /bin/bash -m -d /home/test -c "${CHM} : ${NAME}" test
fi

但是我在使用bash转换我的问题时遇到了问题。到'示例输出

+ CHM=test
+ NAME=user@test
+ grep -q test /etc/passwd
+ useradd -s /bin/bash -m -d /home/test -c 'test : user@test' test
useradd: invalid comment 'test : user@test'

我无法解决如何解决此问题,欢迎使用任何输入,尝试搜索但不会产生任何首选结果

操作系统:RHEL6 GNU bash,版本4.1.2(1)-release(x86_64-redhat-linux-gnu 感谢

2 个答案:

答案 0 :(得分:2)

Bash不会转换任何引号,这纯粹是set -x的输出工件。如您所见,${VARIABLES}已在set -x输出中展开。之后,引用类型不再重要,bash维护者选择在单引号中显示包含空格的所有单词,以使单词边界清晰。

正确识别codegrep_admin时,实际问题是不可能对:中的任何字段使用冒号/etc/passwd。例如。您不能拥有名为foo:bar的用户,并且您无法发表评论test:user@test,并且您不能拥有名为ba:sh的shell。

答案 1 :(得分:1)

/etc/passwd:字符分隔,因此useradd拒绝评论。尝试删除评论中的: