【发布时间】:2019-09-06 18:35:45
【问题描述】:
我需要使用 bash 将用户提供的命令写入文件。
测试用例是script.sh -- echo "Hello \$USER",我想要一个包含echo "Hello $USER"(或echo Hello\ $USER)的文件,可以执行
我正在使用 heredoc 写入文件,所以类似于
cat > "${FILE}" <<EOF
Your command is:
${CMD}
"$@"
EOF
我尝试使用printf -v CMD '%q ' "$@",但这导致echo Hello\ \$USER 这不是我想要的。
我该怎么做?
【问题讨论】:
-
您使用
%q格式有什么原因吗?因为我刚刚尝试使用%s并且它有效 -
你可以像这样使用
$*printf "Your command is $*\n" -
问题是引号/空格:使用
$*或%s将导致echo Hello $USER-> 2 个参数而不是 1 个。这是一个问题,例如cat "foo with bar"->cat foo with bar -
您想要引用空格而不是美元符号?如果是这样,您将不得不进行一些手动字符串操作;没有转义机制可以透视地知道引用一个但不引用另一个。
-
问题从提供给脚本的内容开始。你能让用户引用整个字符串吗?
script.sh -- 'echo "Hello $USER"'将是小菜一碟。
标签: bash heredoc variable-expansion