我有一个包含以下内容的文件 -
a=hello
b='hi'
c=['hi', 'hello']
我想要获取文件的内容。但是我收到以下错误 -
-bash: hello]: command not found
如何逃避特殊字符?
答案 0 :(得分:0)
我认为你要找的是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
变量是一个字符串。
此代码尝试解析您的分配并将变量放入数组中是合适的:
#!/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