[英]Get the executed command, quoted params, after executing `“${argv[@]}”`
此功能有效:
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 \\"ab c.txt\\"
可以在命令显示中使用,但是通过反引号给出了执行错误。
文件"ab c.txt"
是有效的小型文本文件。
您需要在作业内部转义引号:
local CMD="cat \"${argv[@]}\""
同样,不需要echo来连接字符串。
有了bash变量中的令牌数量,您就可以找到正确的解决方案。
我几乎忘记了为什么我们实际上需要引用一个参数,因为它有多个单词!
function foo() {
local argv=( "$@" );
local OUT=`cat "${argv[@]}"`
echo "--------------------------"
echo "$OUT"
echo "--------------------------"
local CMD="cat"
for word in "${argv[@]}"; do
words="${word//[^\ ]} "
if [[ ${#words} > 1 ]]; then
local CMD="$CMD \"${word}\""
else
local CMD="$CMD $word"
fi
done
echo "$CMD"
}
希望它可以帮助某人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.