2016-11-23 125 views
0

我寫有下面的代碼爲什麼bash將雙引號轉換爲單引號?

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

,但我有使用bash問題轉換我「到」例如輸出一個簡單的測試腳本

+ CHM=test 
+ [email protected] 
+ grep -q test /etc/passwd 
+ useradd -s /bin/bash -m -d /home/test -c 'test : [email protected]' test 
useradd: invalid comment 'test : [email protected]' 

我想不出如何解決這一問題任何輸入歡迎,試圖尋找,但不會產生任何的首選結果

OS:RHEL6 GNU的bash,版本4.1.2(1)-release下(x86_64-紅帽Linux的GNU的 感謝

+0

您的要求是什麼?你想如何添加名稱? – Inian

+0

如果看到輸出useradd命令將不接受-c「文本」它只接受-c「文本」 – skelator

+0

無法在Ubuntu上重現。這是哪個操作系統? – heemayl

回答

1

/etc/passwd:字符分隔,因此useradd拒絕該評論。嘗試在您的評論中刪除:

2

Bash不會轉換任何引號,這純粹是set -x的輸出工件。正如你所看到的,${VARIABLES}已經在set -x輸出中進行了擴展。在那之後,引用類型不再重要,bash維護者選擇在單引號中顯示包含空格的所有單詞,以使單詞邊界清晰。

的實際問題,因爲codegrep_admin正確識別,是在/etc/passwd使用結腸:任何字段是不可能的。例如。你不能有一個名爲foo:bar的用戶,你不能有一個評論說test:[email protected],你不能有一個名爲ba:sh的shell。

相關問題