问题描述
在我的一个Bash脚本中,有一个地方,我有一个变量SCRIPT
,其中包含/path/to/an/exe
,脚本最终需要执行的是执行该可执行文件。因此,脚本的最后一行是
$($SCRIPT)
以便将$SCRIPT
扩展为/path/to/an/exe
,然后$(/path/to/an/exe)
执行可执行文件。
但是,在脚本上运行shellcheck
会产生此错误:
In setscreens.sh line 7:
$($SCRIPT)
^--------^ SC2091: Remove surrounding $() to avoid executing output.
For more information:
https://www.shellcheck.net/wiki/SC2091 -- Remove surrounding $() to avoid e...
有没有一种方法可以更合适地重写$($SCRIPT)
? eval
在这里似乎没有太大帮助。
解决方法
$($SCRIPT)
确实没有按照您的想法做。
外部$()
将执行括号内的所有命令并执行结果字符串。
内部$SCRIPT
将扩展为SCRIPT
变量的值,并在将空格/
如果要执行SCRIPT
变量中包含的命令,只需编写一个示例:
SCRIPT='/bin/ls'
"$SCRIPT" # Will execute /bin/ls
现在,如果您还需要通过SCRIPT
变量命令调用来处理参数,则:
SCRIPT='/bin/ls'
"$SCRIPT" -l # Will execute /bin/ls -l
要同时动态存储或构建参数,您需要一个数组而不是字符串变量。
示例:
SCRIPT=(/bin/ls -l)
"${SCRIPT[@]}" # Will execute /bin/ls -l
SCRIPT+=(/etc) # Add /etc to the array
"${SCRIPT[@]}" # Will execute /bin/ls -l /etc
,
它对我来说<input type="number" onkeyup="getvalue(event)" />
<span></span>
<input type="number" onkeyup="getvalue(event)" />
<span></span>
<input type="number" onkeyup="getvalue(event)" />
<span></span>
有效:
sh -c
它也顺利通过了ShellCheck。
,使用bash,只需使用$ SCRIPT:
cat <<'EOF' > test.sh
SCRIPT='echo aze rty'
$SCRIPT
EOF
bash test.sh
产生:
aze rty