在bash脚本

时间:2017-02-01 14:43:32

标签: bash shell

我正在尝试为字符串添加引号。像这样:

stackoverflow => 'stackoverflow'

然后将此字符串附加到另一个由逗号'分隔的变量。喜欢:

$ {list}(在追加之前)=> ' stackexchange',...,'元'

$ {列表}'计算器' => ' stackexchange',...,'元''计算器'

我试图这样做:

            if [ -z "$partition_list" ]
            then

                partition_list="'"${partition}"'"
            else

                partition_list=${partition_list}",'"${partition}"'"
            fi

注意:$ partition是我尝试添加引号的变量。而$ partition_list是我试图将$ partition附加到的列表。

它没有用。我得到这样的字符串:' \'' 10099' \''

修改

我通过这句话获得了分区的价值:

partition=`echo $f | awk -F '=' '{print $2}'`

我们是否有办法添加' sed'到这个语句并将引号添加到$ partition?

非常感谢任何帮助。

谢谢。

2 个答案:

答案 0 :(得分:1)

这是怎么回事?

partition_list="${partition_list:+$partition_list,}'$partition'"

如果if不为空(使用$partition_list),则:+构造将替换为包含逗号的参数扩展,并且双引号内的单引号不会停止变量从扩展。

Plus ... 总是引用您引用的变量。你对foo=$bar",'"$baz"'"的看法有可能是灾难性的,因为变量可能会通过通配扩展。

因此,如果您想要使用if执行此操作,则看起来更像是:

        if [ -z "$partition_list" ]; then
            partition_list="'${partition}'"
        else
            partition_list="${partition_list},'${partition}'"
        fi

答案 1 :(得分:-1)

怎么样: //编辑:更新处理空间。

list=('aa xx' 'bb')
res=()
for ix in  ${!list[*]};do
  res+=(\'${list[$ix]}\')
done
res+=("'stackoverflow'")
echo ${res[*]}