我有一个名为 tablename 的变量,它有前导空格和尾随空格(例如,
tablename= yyy
)。我想删除前导和尾随空格(输出:
tablename=yyy
)并使用 shell 脚本将此变量写入文件,不留任何空格。
答案1
var=' A B C '
和zsh
:
trim=${${var%${var##*[^[:blank:]]}}#${${var%${var##*[^[:blank:]]}}%%[^[:blank:]]*}}
printf '++%s++\n' $trim
++AB C++
和bash
:
shopt -s extglob
trim=${var%%*([[:blank:]])}
trim=${trim##*([[:blank:]])}
printf '++%s++\n' "$trim"
++AB C++
对于任何 shell,您都可以使用附加变量来保存前导和尾随空格1(它与解决方案基本相同,zsh
但没有嵌套操作):
trail=${var##*[^[:blank:]]} # get trailing space
var=${var%${trail}} # remove trailing space
lead=${var%%[^[:blank:]]*} # get leading space
trim=${var#${lead}} # remove leading space
printf '++%s++\n' "$trim"
++AB C++
1:为了清楚起见,我在这里使用两个变量来分别保存前导和尾随空白,但一个变量就可以了。
答案2
正如给出的您在其他网站上的帖子:
tablename=${tablename// }
答案3
该read
命令将修剪前导和尾随空白字符(由 的值定义IFS
);您可以将其与此处文档一起使用来修剪空格:
IFS=' ' read tablename <<EOF
$tablename
EOF
如果您使用的是 bash(不是某些品牌的 X shell),您可以使用此处字符串而不是此处文档来简化此操作:
IFS=' ' read tablename <<<"$tablename"
请注意,由于此分配$IFS
是命令的前缀read
,因此它仅适用于该命令,并且之后不必重置。另外,如果您没有搞乱$IFS
并且想要修剪任何制表符和空格,则IFS
根本不需要设置。
答案4
echo "tablename =yyy" | tr -d ' '
tablename=yyy