繁体   English   中英

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

[英]Why bash converting double quotes to single quotes?

我编写了一个包含以下代码的简单测试脚本

#!/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)-发行版(x86_64-redhat-linux-gnu谢谢

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

正如codegrep_admin正确确定的那样,实际的问题是无法对/etc/passwd任何字段使用冒号: 例如,您不能有一个名为foo:bar的用户,也不能有一个注释说test:user@test ,也不能有一个名为ba:sh的外壳。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM