【问题标题】:parameters with special characters in bash scriptbash脚本中带有特殊字符的参数
【发布时间】:2017-08-16 13:44:45
【问题描述】:

我们有以下 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 

如何改进代码以获得原始值作为“*”或“@$!!”来自回声 $val

【问题讨论】:

  • 你能正确缩进你的文件吗?
  • 请清理所有这些点和空白,然后简单地发布一个脚本来重现您所询问的任何问题(即minimal reproducible example)。

标签: linux bash shell perl awk


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    相关资源
    最近更新 更多