问题是,当您在引号外的大括号中有一个列表时,shell 会执行大括号扩展(bash
手动,但ksh
会类似)。由于“外部引号”位很重要,它还告诉您如何避免该问题 - 打印时将字符串括在引号中:
#!/usr/bin/ksh
valid_data_range="{2013/05/01},{2013/05/02},{2013/05/03}"
finalDates="{$valid_data_range}"
print "$finalDates"
(该print
命令特定于ksh
并且不存在于 中bash
。分配行中的更改更美观而不是功能。)
此外,大括号扩展不会发生在bash
; 它仅在直接编写大括号时发生。这个双语脚本(ksh
和bash
):
valid_data_range="{2013/05/01},{2013/05/02},{2013/05/03}"
finalDates="{$valid_data_range}"
printf "%s\n" "$finalDates"
printf "%s\n" $finalDates
产生:
ksh
{{2013/05/01},{2013/05/02},{2013/05/03}}
{2013/05/01}
{2013/05/02}
{2013/05/03}
bash
(也zsh
)
{{2013/05/01},{2013/05/02},{2013/05/03}}
{{2013/05/01},{2013/05/02},{2013/05/03}}
因此,当您需要使用变量$finalDates
时,请确保它在双引号内:
other_command "$finalDates"
if [ "$finalDates" = "$otherString" ]
then : whatever
else : something
fi
等等——使用你喜欢的布局来处理你不喜欢我的任何东西。