我正在读取带有以下内容的文件:
folder=abc
name=xyz
对于某些行,我想设置一个变量,例如name=xyz
对应于我已阅读的行。
使用name=xyz
和folder=abc
将其删除,我尝试过:
while read -r line; do
$line
echo $name
done < /etc/testfile.conf
这会显示错误消息./test: line 4: folder=abc: command not found
等。
我尝试过"$line"
和$($line)
,它是相同的。可以做我想做的事吗?
我成功做到了:
while read -r line; do
if [[ "$line" == 'folder'* ]]; then
folder="$(echo "$line" | cut -d'=' -f 2)"
fi
if [[ "$line" == 'name'* ]]; then
name="$(echo "$line" | cut -d'=' -f 2)"
fi
done < /etc/testfile.conf
但这似乎很混乱
答案 0 :(得分:3)
对于您的样本,declare
是最安全的选择:
while read -r line; do
declare "$line"
done
$ echo "$folder"
abc
$ echo "$name"
xyz
答案 1 :(得分:1)
直接使用,请使用eval
。
不同的方法,请尝试使用source
或.
:
$ echo "$line"
folder=abc
$ . <(echo "$line")
$ echo "$folder"
abc
但是可能很好的答案是用不同的方式解决问题。
答案 2 :(得分:0)
您无需使用const router = new Router({
routes: [
{
path: '*',
redirect: '/login'
},
{
path: '/',
redirect: '/login'
},
{
path: '/login',
name: 'Login',
component: Login
},
{
path: '/',
name: 'Home',
component: Home,
meta: {
authenticated: true
}
}
]
})
router.beforeEach((to, from, next) => {
let user = firebase.auth().currentUser;
let approbation = to.matched.some(record => record.meta.authenticated)
if (approbation && !user) {
next('/login')
} else if (!approbation && user && from.path !== '/') {
next('/')
}
})
export default router
就可以稍微清理一下方法。
eval
答案 3 :(得分:0)
为什么不仅源文件?
$ . infile ; echo "$name"
xyz