2017-08-16 13 views
-1

Wir haben die folgenden CSV-Datei,Parameter mit Sonderzeichen in Bash-Skript

Datei enthalten Parameter und Wert

 more hadoop.txt 

     security.admin.protocol.acl,* 
     security.client.protocol.acl,*** 
     xasecure.add-hadoop-authorization,true 
     ranger.plugin.hdfs.policy.rest.ssl.config.file,/etc/hadoop/conf/ranger-policymgr-ssl.xml, 
     ranger.plugin.hdfs.policy.source.impl,org.apache.ranger.admin.client.RangerAdminRESTClient 
     ranger.plugin.hdfs.policy.cache.dir,/etc/ranger/{{repo_name}}/policycache", 
     ranger.plugin.hdfs.policy.pollIntervalMs,@$!! 
     ranger.plugin.hdfs.service.name,{{repo_name}} 

der folgende Code ist ein Teil meiner Bash-Skript:

while read -r line 
do 

param=` echo $line | awk -F ',' '{print $1}' ` 
val=` echo $line | awk -F ',' '{print $2}' ` 
echo $val 
if [[ $val = $hadoop_val ]] 
them 

done < $hadoop.txt 

Das Problem ist, wenn val "*" oder "@ $ !!" oder andere Sonderzeichen dann bekommen wir anderen Wert:

echo $val 

wie Sie den Code zu verbessern, um die ursprünglichen Werte als „*“ oder „@ $ !!“ zu bekommen von echo $ val

+1

10 Konnten Sie Ihre Datei ordnungsgemäß einrücken? –

+0

Bitte bereinigen Sie all diese Punkte und Leerzeichen und geben Sie einfach ein Skript ein, das jedes Problem wiedergibt, nach dem Sie fragen (z. B. ein [mcve]). –

Antwort

0

Um zu verhindern, dass Sonderzeichen erweitert werden, können Sie Ihre Variable zwischen doppelten Anführungszeichen einschließen. Als eine Seite müssen Sie nicht awk verwenden, nur die IFS ändern: