[英]ksh script + print argument content in shell script
我想使用一个参数运行script.sh
。
如果第一个参数= action,那么script.sh
将打印action参数- restart machine each 1 min
我的示例无法正常工作,但是请提出脚本中需要解决的问题,以便在参数为action
打印$action
参数。
备注我不想设置以下解决方案- [[ $1 = action ]] && echo action "restart machine each 1 min
我的示例脚本:
#!/bin/ksh
action="restart machine each 1 min"
echo "action" ${$1}
示例如何运行脚本
./script.sh action
我需要获得的预期结果:
action restart machine each 1 min
已经两年了,但是这里有一个使用nameref
(aka nameref
typeset -N
)的例子。 它包括三个连续的测试以验证给定参数的有效性。
nameref
进行检查。 action='This is the value of $action'
word='This it the value of ${word}'
list='This is a list'
lie='This is a lie'
(
typeset name=${1:?Usage: script.sh varname} || exit
nameref arg1=${name} || exit
: ${arg1:?} || exit
echo "$name $arg1"
)
您要使用eval:
action="restart machine each 1 min" eval echo $1 \$$1
请注意,这样做会带来巨大的安全风险。 考虑如果用户使用第一个参数“; rm -rf /”调用脚本会发生什么情况
您可以通过以下方法缓解此类问题:
eval "echo '$1' \"\$$1\""
但是实际上,您只是在自找麻烦(如果第一个参数包含双引号,而$()构造将允许执行任意命令,则该最后一个版本将很困难)。 仅使用case语句并检查参数是否与您要查找的字符串完全匹配要安全得多。 或者,至少检查您要评估的参数是否不包含以下任何字符: ;()$"'
。最安全的方法是检查其仅包含字母数字( a-zA-Z0-9
)
使用pdksh
可以正常工作:
echo "action" `eval echo '$'$1`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.