簡體   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