bash – printf,忽略多余的论点?
发布时间:2020-12-15 22:07:16 所属栏目:安全 来源:网络整理
导读:我注意到今天 Bash printf有一个-v选项 -v var assign the output to shell variable VAR rather than display it on the standard output 如果我这样调用就行了 $printf -v var "Hello world"$printf "$var"Hello world 来自管道它不起作用 $grep "Hello wo
我注意到今天
Bash printf有一个-v选项
-v var assign the output to shell variable VAR rather than display it on the standard output 如果我这样调用就行了 $printf -v var "Hello world" $printf "$var" Hello world 来自管道它不起作用 $grep "Hello world" test.txt | xargs printf -v var -vprintf: warning: ignoring excess arguments,starting with `var' $grep "Hello world" test.txt | xargs printf -v var "%s" -vprintf: warning: ignoring excess arguments,starting with `var' 解决方法
xargs将调用/usr/bin/printf(或者在系统上安装二进制文件的位置).它不会调用bash的内置函数.只有内置(或采购脚本或类似)才能修改sh??ell的环境.
即使它可以调用bash的内置函数,你的示例中的xargs也会在子集中运行.无论如何,子shell无法修改它的父级环境.所以你正在尝试的东西是行不通的. 如果我理解你的样品,我会看到一些选项;样本数据: $cat input abc other stuff def ignored cba more stuff 简单的变量(根据你想要的东西有点棘手): $var=$(grep a input) $echo $var abc other stuff cba more stuff $echo "$var" abc other stuff cba more stuff 如果您想在数组中使用单个单词,请使用数组: $var=($(grep a input)) $echo "${var[0]}"-"${var[1]}" abc-other 或者如果你想要每个数组元素中的整行: $IFS=$'n' var=($(grep a input)) ; unset IFS $echo "${var[0]}"-"${var[1]}" abc other stuff-cba more stuff (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |