以文件名执行输出

问题描述

在我的一个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