我想转此input_variable = 1
进入input_variable = 01
从此前的帖子我尝试了这个但是没有用:
sed -e "s/\0" <<< "$input_variable"
我明白了:
语法错误:重定向意外
我做错了什么?
谢谢!
修改
感谢Benjamin我找到了一个解决方法(我仍然想知道为什么sed
不起作用):
new_variable="0$input_variable"
答案 0 :(得分:1)
您不要关闭替换命令。每个替换命令必须包含3个分隔符
sed -e 's/pattern/replacement/' <<< 'text' # 3 backslashes
您想要做的事情可以通过以下方式完成:
sed -e 's/.*/0&/' <<< $input_variable
编辑:
您可能正在使用Ubuntu并偶然发现dash
也称为Almquist shell,它没有<<<
重定向运算符。以下是符合POSIX的替代方案,也适用于dash
:
sed -e 's/.*/0&/' <<~
$input_variable
~
还有这个:
echo $input_variable | sed -e 's/.*/0&/'
要让变量采用新值,请执行以下操作:
input_variable=$(echo $input_variable | sed -e 's/.*/0&/')
然而,这不是你编写shell脚本的方式。 Shell脚本通常会给出一些文本输出,而不是设置外部变量:
所以,脚本,我们称之为 append_zero.sh :
#!/bin/sh
echo $1 | sed 's/.*/0&/'
你会像这样执行它:
$ input_variable=1
$ input_variable=$(append_zero.sh input_variable)
$ echo $input_variable
01
通过这种方式,您可以使用任何具有POSIX兼容/ bin / sh的Unix系统重用的shell脚本
答案 1 :(得分:1)
虽然可以使用sed
完成,但脚本中的简单分配可以完全按照您的要求完成。例如,如果您有input_variable=1
并想要input_variable=01
,则可以通过分配添加前导0
:
input_variable="0${input_variable}"
或者对于其他类型的数字格式,您可以使用printf -v
选项并利用printf
函数提供的格式说明符。例如:
printf -v input_variable "%02d" $input_variable
将零填充 input_variable
长度为2
(或使用 field-width 修饰符指定的任何宽度)。您也可以添加前导零,无论宽度如何:
printf -v input_variable "0%s" $input_variable
sed
是一个很好的工具,但它并不是这项工作的正确工具。