如何在字符串连接中包含短划线(或其他特殊字符)?

问题描述 投票:0回答:1

所以这可能是一个基本而微不足道的问题,但我正在努力在字符串连接中使用短划线/减号( - )。 (实际上还有其他符号,如低音等。)

说,我有3个变量:

var1="${otherstring:0:4}"
var2="${otherstring:4:2}"
var3="${otherstring2:6:2}"

我想以下列方式融合它们:

datap1="$var1$var2"-"$var3"

短划线插入其间。

问题是我的输出在短划线后被切断:

var1var2-

我究竟做错了什么?


编辑 - 添加代码:

#! /bin/sh -

find . -type f -mtime -7 | sed "s|^\./||" | xargs -n1 gunzip
var1=$(ls -t *.log | head -n1 | sed 's/.log$//' | egrep -o '.{1,8}$')
var2=$(ls -t *.log | tail -n1 | sed 's/.log$//' | egrep -o '.{1,8}$')
any1="${var1:0:4}"
any2="${var2:0:4}"
mes1="${var1:4:2}"
mes2="${var2:4:2}"
dia1="${var1:6:2}"
dia1="${var2:6:2}"
if [ "$any1" == "$any2" ]; then
    if [ "$mes1" == "$mes2" ]; then
        datap1="$any1$mes1$dia1"-"$dia2"
    else
        datap1="$any1$mes1$dia1"-"$mes2$dia2"
    fi
else
    datap1="$any1$mes1$dia1"-"$any2$mes2$dia2"
fi
/usr/local/exim/bin/eximstats -nr -t0 -nt -xls *.log > stats_01_"$datap1".xls
find . -type f -name "*.log" | sed "s|^\./||" | xargs -n1 gzip

我将其作为.sh文件运行。

[代码的第一部分只是为了获取字符串操作的必要部分,日志包含其名称末尾的日期。日志文件的类型为“foo_bar_foo_20190410.log”。 if循环只是一些日期比较/排序。]

linux string bash symbols
1个回答
2
投票

您的代码对我来说是预期的。

你甚至不需要把短划线放在引号之外,这也有效:

datap1="$var1$var2-$var1"

您需要做一些特殊事情的情况是,如果允许将分隔符作为变量名称的一部分,例如下划线。如果你写

datap1="$var1$var2_$var1"

它将尝试找到一个名为var2_的变量,它将失败,因此不会被替换;价值将是var1var1。您可以在变量名称周围加上大括号来分隔它:

datap1="$var1${var2}_$var1"
© www.soinside.com 2019 - 2024. All rights reserved.