加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读