我知道此问题已存在重复:How to trim whitespace from a Bash variable?。
我在那里阅读了所有的答案,但我有一个关于我心中的另一个解决方案的问题,我想知道这是否有效。
这是我认为有效的解决方案。
a=$(printf "%s" $a)
这是一个演示。
$ a=" foo "
$ a=$(printf "%s" $a)
$ echo "$a"
foo
答案 0 :(得分:0)
如果变量a设置为" -e"," -n"在开始时,根据您以后处理结果的方式,用户可能会崩溃您的脚本: -e选项允许echo解释反向事物。
即使在你只想显示变量a的情况下,-n也会拧紧你的布局。
你可以考虑使用正则表达式检查你的变量是否以' - '然后是一个可用的echo选项(-n,-e,-E, - help, - version)。
答案 1 :(得分:0)
当输入在非空白字符之间包含空格时,它会失败。
$ a=" foo bar "
$ a=$(printf "%s" $a)
$ echo "$a"
foobar
预期的输出是以下。
foo bar
答案 2 :(得分:0)
您可以使用Bash的内置模式替换。 注意:Bash模式替换使用“路径名扩展”(全局)模式匹配,而不是正则表达式。我的解决方案要求启用可选的shell行为extglob(shopt -s extglob)。
$shopt -s extglob
$ a=" foo bar "
$ echo "Remove trailing spaces: '${a/%*([[:space:]])}'"
Remove trailing spaces: ' foo bar'
$ echo "Remove leading spaces: '${a/#*([[:space:]])}'"
Remove leading spaces: 'foo bar '
$ echo "Remove all spaces anywhere: '${a//[[:space:]]}'"
Remove all spaces anywhere: 'foobar'
有关参考,请参考Bash手册页EXPANSION部分的“ Parameter Expansion”(模式替换)和“ Pathname Expansion”子部分。