gpt4 book ai didi

bash - Case 语句评估为字符串

转载 作者:行者123 更新时间:2023-11-29 08:50:28 25 4
gpt4 key购买 nike

我已经发现了函数式编程的错误,所以对我来说自然没有什么是足够好的了。 ;)

因此,在 bash 中可以这样写:

case $status in
"foo") status="bar" ;;
"baz") status="buh" ;;
*) status=$status ;;
esac

但我怕打错字,所以我更愿意写:

status=case $status in
"foo") "bar" ;;
"baz") "buh" ;;
*) $status ;;
esac

第二种形式无效,因为 case 的计算结果是最后执行的命令的退出代码,这根本不是我要找的。

是否有简单的技巧可以实现我正在寻找的东西?

最佳答案

如果你确定状态只会是一行,你可以用 sed 做这样的事情:

status=$(echo "$status" | sed -e 's:^foo$:bar:' -e 's:^baz$:buh:')

您也可以使用 bash 的内置替换来获得一些东西。这几乎有效(我不知道有什么方法可以只获得精确匹配):

status=${status/foo/bar}
status=${status/baz/buh}

如果您的目标只是变得更“实用”(而不是让您的代码更能防止错字),您可以这样做:

status=$(
case "$status" in
("foo") echo "bar" ;;
("baz") echo "buh" ;;
(*) echo "$status" ;;
esac)

老实说,bash 可能是最难尝试并发挥作用的语言之一。它的设计确实带有一种更加命令式的思维方式,您无法轻松编写表达式这一事实就说明了这一点。在第二个代码片段中看到我如何将它分成两个单独的语句?如果 bash 被设计成功能性的,你就可以写这样的东西:

status=${{status/baz/buh}/foo/bar}

但这有效。

我建议只将 bash 用于更简单的脚本,而对于更复杂的东西,请使用 Python 或 Ruby 之类的东西。它们会让您编写功能更强大的代码,而无需不断地与语言作斗争。

关于bash - Case 语句评估为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2283640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com