在获取文件时转义特殊字符

时间:2016-09-23 06:49:07

标签: bash shell

我有一个包含以下内容的文件 -

a=hello
b='hi'
c=['hi', 'hello']

我想要获取文件的内容。但是我收到以下错误 -

-bash: hello]: command not found

如何逃避特殊字符?

2 个答案:

答案 0 :(得分:0)

版本1:没有bash数组

我认为你要找的是declare命令。例如,您在文件file中的定义:

$ cat file
a=hello
b='hi'
c=['hi', 'hello']

让我们在您的文件的每一行上运行declare

$ while read -r line; do declare "$line"; done <file

我们可以验证定义是否成功,以及是否使用-p选项创建了环境变量:

$ declare -p a b c
declare -- a="hello"
declare -- b="'hi'"
declare -- c="['hi', 'hello']"

或者,在echo语句中使用它们:

$ echo "a=$a b=$b c=$c"
a=hello b='hi' c=['hi', 'hello']

与采购不同,declare不会执行您的文件。这使得使用起来更安全。

使用此方法,c变量是一个字符串。

版本2:bash数组

此代码尝试解析您的分配并将变量放入数组中是合适的:

#!/bin/bash
while read -r line
do
  case "$line" in
      *[*)
          line=${line/[/(}
          line=${line/]/)}
          line=${line//,/ }
          declare -a "$line"
          ;;
      *)
          declare "$line"
          ;;
  esac
done <file

运行此代码后,c是一个实际的bash数组:

$ declare -p a b c
declare -- a="hello"
declare -- b="'hi'"
declare -a c='([0]="hi" [1]="hello")'

答案 1 :(得分:0)

用法不正确。如果你想用数组初始化c, 你可以这样做。

cat test
a=hello
b='hi'
c= ('hi' 'hello') 

源测试不会给出任何错误。 您可以使用bellow命令查看c

的内容
 echo ${c[@]}

给出以下输出

 hi hello