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')
,如果您需要的话。您可以痛苦地替换为一个临时文件和源代码,但这听起来很像一个。