linux – 如果后跟管道(bash bug?),Bash变量默认不起作用

linux – 如果后跟管道(bash bug?),Bash变量默认不起作用,第1张

概述我刚刚在bash中发现了一个我不理解的奇怪行为.表达方式 ${variable:=default} 如果尚未设置变量,则将变量设置为默认值.请考虑以下示例: #!/bin/bashfile ${foo:=$1}echo "foo >$foo<"file ${bar:=$1} | catecho "bar >$bar<" 输出是: $./test myfile.txtmyfile.txt: 我刚刚在bash中发现了一个我不理解的奇怪行为.表达方式

${variable:=default}

如果尚未设置变量,则将变量设置为默认值.请考虑以下示例:

#!/bin/bashfile ${foo:=}echo "foo >$foo<"file ${bar:=} | catecho "bar >$bar<"

输出是:

$./test myfile.txtmyfile.txt: ASCII textfoo >myfile.txt<myfile.txt: ASCII textbar ><

您会注意到变量foo的值为$1,但变量bar不是,即使其默认结果显示在file命令中.

如果你从第4行将无害管道移到cat并重新运行它,那么foo和bar都设置为$1的值

我在这里错过了什么,或者这可能是一个bash BUG?

(GNU bash,版本4.3.30)

解决方法 在第二种情况下,文件是管道成员,并在其自己的shell中作为每个管道成员运行.当子shell结束的文件时,带有$1新值的$b不再存在.

解决方法:

#!/bin/bashfile ${foo:=}echo "foo >$foo<": "${bar:=}"     # Parameter Expansion before subshellfile $bar | catecho "bar >$bar<"
总结

以上是内存溢出为你收集整理的linux – 如果后跟管道(bash bug?),Bash变量默认不起作用全部内容,希望文章能够帮你解决linux – 如果后跟管道(bash bug?),Bash变量默认不起作用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1023653.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存