Hug*_*ing 16 shell properties-file
我有一个类似的文件
name1=value1
name2=value2
Run Code Online (Sandbox Code Playgroud)
我需要使用shell脚本和设置变量来读取此文件
$name1=value1
$name2=value2
Run Code Online (Sandbox Code Playgroud)
请提供可以执行此操作的脚本.
我尝试了下面的第一个答案,即获取属性文件,但如果值包含空格,我会遇到问题.它被解释为空格后的新命令.如何让它在空间存在的情况下工作?
Joa*_*uer 20
如果输入文件中的所有行都是这种格式,那么只需获取它就会设置变量:
source nameOfFileWithKeyValuePairs
Run Code Online (Sandbox Code Playgroud)
要么
. nameOfFileWithKeyValuePairs
Run Code Online (Sandbox Code Playgroud)
rob*_*nst 12
使用文件来获取文件.或者source您还可以将命令放在那里执行.如果输入不是绝对可信的,那就是问题(你好rm -rf /).
read如果只有有限的已知数量的键,您可以使用这样读取键值对:
read_properties()
{
file="$1"
while IFS="=" read -r key value; do
case "$key" in
"name1") name1="$value" ;;
"name2") name2="$value" ;;
esac
done < "$file"
}
Run Code Online (Sandbox Code Playgroud)
kur*_*umi 11
使用:
while read -r line; do declare "$line"; done <file
Run Code Online (Sandbox Code Playgroud)
小智 9
如果您的文件位置是/location/to/file并且关键是mykey:
grep mykey $"/location/to/file" | awk -F= '{print $2}'
Run Code Online (Sandbox Code Playgroud)
假设您的文件名是 some.properties
#!/bin/sh
# Sample shell script to read and act on properties
# source the properties:
. some.properties
# Then reference then:
echo "name1 is $name1 and name2 is $name2"
Run Code Online (Sandbox Code Playgroud)
@robinst的改进版本
read_properties()
{
file="$1"
while IFS="=" read -r key value; do
case "$key" in
'#'*) ;;
*)
eval "$key=\"$value\""
esac
done < "$file"
}
Run Code Online (Sandbox Code Playgroud)
变化:
一个不错的解决方案也是@kurumi的解决方案,但是busybox不支持
这里是一个完全不同的变体:
eval "`sed -r -e "s/'/'\\"'\\"'/g" -e "s/^(.+)=(.+)\$/\1='\2'/" $filename`"
Run Code Online (Sandbox Code Playgroud)
(我尽力做到最好的转义,但不确定是否足够)
| 归档时间: |
|
| 查看次数: |
36655 次 |
| 最近记录: |