linux - 执行后获取执行的命令,带引号的params `"${argv[@] }"`

标签 linux bash shell

此功能有效:

source foo.bash && foo -n "a b c.txt"

问题是,无论我尝试什么,我都无法让最后一行 echo "$CMD" (或 echo $CMD)生成以下输出:

cat -n "a b c.txt"

如何实现这一目标?

# foo.bash
function foo() {
    local argv=("$@");
    local OUT=`cat "${argv[@]}"`
    local CMD=`echo cat "${argv[@]}"`
    echo "--------------------------"
    echo "$OUT"
    echo "--------------------------"
    echo "$CMD"
}

输出是:

cat -n a b c.txt

使用此命令:foo -n\"a b c.txt\" 它确实可以显示命令,但它会通过反引号给出执行错误。

文件“ab c.txt”是一个有效的小文本文件。

最佳答案

您需要转义作业内的引号:

local CMD="cat \"${argv[@]}\""

此外,连接字符串不需要 echo。

关于linux - 执行后获取执行的命令,带引号的params `"${argv[@] }"`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11916868/

相关文章:

linux - 哪些 <4GB 的工作负载在 Linux x32 ABI 中的性能会比 x64 差?

macos - 使用变量创建 Mac 终端脚本

linux - LD_LIBRARY_PATH 未链接库

linux - 发送 ssh 命令时防止本地 shell 替换变量

linux - 将行作为参数传递给脚本

python - 如何在更新版本的libreoffice中使用unoconv

linux - 是否有比 `std::process::Command` 更低级别的接口(interface)来将单个字符串作为进程执行?

c++ - 当两者都是变量时如何将 float 除以整数?

python、unix、NameError : name not defined. 无法识别字符串变量

bash - 如何使用 sed 搜索日期之间的日志