执行输出作为文件名
Executing the output as filename
在我的一个 Bash 脚本中,有一点我有一个包含 /path/to/an/exe
的变量 SCRIPT
,而脚本最终需要做的是执行它可执行。因此脚本的最后一行是
$($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
在这里似乎没有太大帮助。
与bash,只需使用$SCRIPT:
cat <<'EOF' > test.sh
SCRIPT='echo aze rty'
$SCRIPT
EOF
bash test.sh
生产:
aze rty
它对我有用 sh -c
:
$ chrome="/opt/google/chrome/chrome"
$ sh -c "$chrome"
Opening in existing browser session.
它也顺利通过了 ShellCheck。
$($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
在我的一个 Bash 脚本中,有一点我有一个包含 /path/to/an/exe
的变量 SCRIPT
,而脚本最终需要做的是执行它可执行。因此脚本的最后一行是
$($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
在这里似乎没有太大帮助。
与bash,只需使用$SCRIPT:
cat <<'EOF' > test.sh
SCRIPT='echo aze rty'
$SCRIPT
EOF
bash test.sh
生产:
aze rty
它对我有用 sh -c
:
$ chrome="/opt/google/chrome/chrome"
$ sh -c "$chrome"
Opening in existing browser session.
它也顺利通过了 ShellCheck。
$($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