Bash-如何执行变量

时间:2019-04-21 07:35:41

标签: bash variables execute

我正在读取带有以下内容的文件:

folder=abc
name=xyz

对于某些行,我想设置一个变量,例如name=xyz对应于我已阅读的行。

使用name=xyzfolder=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

但这似乎很混乱

4 个答案:

答案 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