bash - 用于查找/替换字符串变量的简单 bash 函数(无文件)
问题描述
我只是想要一个函数(或只是一个 1-liner)来查找/替换变量内的字符串,而不用担心变量是否包含疯狂的字符。
伪代码:
findReplace () {
#what goes here?
}
myLongVar="some long \crazy/ text my_placeholder bla"
replace="my_placeholder"
replaceWith="I like hamburgers/fries"
myFinalVar=$(findReplace $myLongVar $replace $replaceWith)
所有类似的问题看起来都很复杂并且使用文件
解决方案
您可以像这样定义函数:
findReplace1() {
printf "%s" "${1/"$2"/$3}"
}
然后像这样运行它:
myFinalVar=$(findReplace "$myLongVar" "$replace" "$replaceWith")
请注意双引号——它们非常重要,因为没有它们,bash 会将变量的值拆分为单独的单词(例如"some long \crazy/ text..."
-> "some" "long" "\crazy/" "text..."
),并且还会尝试将任何看起来像通配符的内容扩展为匹配的文件名列表。可以将它们放在作业的右侧 ( myFinalVar=...
),但这是少数可以的地方之一。另外,请注意,在函数中我放了双引号$2
- 在这种情况下,它再次被视为通配符模式,但这里它是一个字符串匹配通配符而不是文件名。哦,我使用printf "%s"
而不是echo
因为某些版本的echo
字符串会使用包含反斜杠和/或以“-”开头的字符串来做奇怪的事情。
而且,当然,您可以跳过该功能并直接进行替换:
myFinalVar=${myLongVar/"$replace"/$replaceWith}
推荐阅读
- android - 工具栏 xml 阴影(高度)只能在 Android 21+ 上运行
- c# - 为什么我不能枚举 X509Store.Certificates
- c# - 在内部函数c#中调用方法
- c++ - 是否可以将数组作为参数传递给函数而不为该数组创建变量?
- string - 如何仅替换 MIPS 中字符串的第一个字符?
- javascript - 三.js定位问题和coneGeometry错误
- c - (C) 我们可以通过哪些方式来操作内存长度和地址?
- c# - InternetSetCookieEx InternetGetCookieEx Cookie 从不/总是过期
- php - Ubuntu LEMP 堆栈中的 Laravel 502 错误网关
- c++ - 如何阻止角色在控制台中移动?