我正在使用以下输出:
OUTPUT="VAL1 VAL2 VAL3 VAL4" #(two spaces between each VAL)
我正在尝试将输出存储在变量SAMPLE中,以便将双空格替换为逗号,就像在脚本中运行一样:
SAMPLE=$(echo $OUTPUT | sed 's/\ \ /\,/g'); echo $SAMPLE
返回VAL1 VAL2 VAL3 VAL4
(每个val之间有一个空格)
然而,如果我在不将其存储到变量的情况下运行它,我会获得不同的输出
echo $OUTPUT | sed 's/\ \ /\,/g')
根据需要返回VAL1,VAL2,VAL3,VAL4
答案 0 :(得分:3)
作为一项规则,您应该始终在bash中引用变量以保留格式(除非您有一些不使用引号的特定原因,例如想要扩展,想要做一些像使用echo $variable
限制到一个空间的hackish,在[[]]
内(可选)等......)
$ echo $OUTPUT
VAL1 VAL2 VAL3 VAL4"
$ echo "$OUTPUT"
VAL1 VAL2 VAL3 VAL4
$ SAMPLE=$(echo "$OUTPUT" | sed 's/\ \ /\,/g'); echo "$SAMPLE"
VAL1,VAL2,VAL3,VAL4
echo $OUTPUT | sed 's/\ \ /\,/g'
不应该导致逗号分隔列表(不引用$OUTPUT
),除非您有一些奇怪的echo
/ shell
。
此外,在bash中使用大写变量名称可能不是最好的惯例,因为它们主要用于内部变量(例如$PWD
)