我需要触发一个 bash 传递参数,其格式为 [variable_name="value"],如下所示:
./test.sh ip='164.130.21.98' hostname='whatever' pwd='/test' ftpcmd='CWD debug' user='stefano'
在 test.sh 脚本上,我想为任何变量分配相关值:
#!/bin/bash
eval `echo "$@"`
echo $ftpcmd
但我得到一个prova: command not found
错误。
我无法理解我的参数出了什么问题ftpcmd='CWD debug'
,也不知道我应该如何编写它。
如果我尝试用声明替换 eval ,则$ftpcmd
仅将其设置为CWD
而不是CWD debug
我所期望的。
答案1
如果你把作业前剧本
ip='164.130.21.98' hostname='whatever' pwd='/test' ftpcmd='CWD debug' user='stefano' ./test.sh
这些变量在脚本环境中可用。该-k
选项治疗全部分配,而不仅仅是预命令分配,如环境修改。
set -k
./test.sh ip='164.130.21.98' hostname='whatever' pwd='/test' ftpcmd='CWD debug' user='stefano'
set +k
无论哪种情况,eval
都根本不需要并且可以删除。