Bash 寻源文件时转义特殊字符

Bash 寻源文件时转义特殊字符,bash,shell,Bash,Shell,我有一个包含以下内容的文件- a=hello b='hi' c=['hi', 'hello'] 我想找到文件内容的来源。但我得到了以下错误- -bash:hello]:未找到命令 如何转义特殊字符?Version1:无bash数组 我认为您正在寻找的是declare命令。例如,使用文件文件中的定义: $ cat file a=hello b='hi' c=['hi', 'hello'] 让我们在文件的每一行上运行declare: $ while read -r line; do declar

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

a=hello
b='hi'
c=['hi', 'hello']
我想找到文件内容的来源。但我得到了以下错误-

-bash:hello]:未找到命令

如何转义特殊字符?

Version1:无bash数组 我认为您正在寻找的是
declare
命令。例如,使用文件
文件
中的定义:

$ cat file
a=hello
b='hi'
c=['hi', 'hello']
让我们在文件的每一行上运行
declare

$ while read -r line; do declare "$line"; done <file
或者,在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
版本1:没有bash数组 我认为您正在寻找的是
declare
命令。例如,使用文件
文件
中的定义:

$ cat file
a=hello
b='hi'
c=['hi', 'hello']
让我们在文件的每一行上运行
declare

$ while read -r line; do declare "$line"; done <file
或者,在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, 你可以这样做

cat test
a=hello
b='hi'
c= ('hi' 'hello') 
源代码测试不会给出任何错误。 您可以使用下面的命令查看c的内容

 echo ${c[@]}
这将给出以下输出

 hi hello

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

cat test
a=hello
b='hi'
c= ('hi' 'hello') 
源代码测试不会给出任何错误。 您可以使用下面的命令查看c的内容

 echo ${c[@]}
这将给出以下输出

 hi hello

只需根据您的需要对它们进行双引号
c=“['hi','hello']”
或单引号
c='['hi','hello']'
我不想改变数组的编写方式。是否有一种方法可以在源文件时转义这些字符?正确的Bash语法应该是
c=('hi''hello')
,如果您需要的话。您可以痛苦地将其替换为一个临时文件和源代码,但这听起来很像一个。只需根据您的需要对其进行双引号
c=“['hi','hello']”或单引号引用即可
c='['hi','hello']'
我不想改变数组的编写方式。是否有一种方法可以在源文件时转义这些字符?正确的Bash语法应该是
c=('hi''hello')
,如果您需要的话。您可以痛苦地替换为一个临时文件和源代码,但这听起来很像一个。