此功能有效:
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/