我们有以下CSV文件,

文件包含参数和值

      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}}


以下代码是我的bash脚本的一部分:

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


问题是val是“ *”或“ @ $ !!”时或其他特殊字符,那么我们将从以下内容中获得不同的价值:

echo $val


如何改进代码以获得原始值“ *”或“ @ $ !!”从echo $ val

最佳答案

为防止特殊字符扩展,您可以将变量用双引号引起来。顺便说一句,您不必使用awk,只需更改IFS:

IFS=,
while read -r param val
do
    echo "$val"
done < doop.log

关于linux - bash脚本中带有特殊字符的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45715309/

10-13 06:55