-1

这里是一个相对的新手。我正在使用以下命令读取文件:

while read line
 do 
      commands here
done < file

我将这条线分成两部分,用破折号分隔,如下所示

dash_pos=`expr index "$line" -`

dash_pos显然不是一个常数,这就是为什么我把它变成一个变量。

我现在可以执行以下操作

Part1=${line:0:$dash_pos -2}
Part2=${line:$dash_pos + 1}

这些命令按预期工作。

有没有一种方法可以使字符串操作命令成为变量,例如

Find_Part1=${line:0:$dash_pos -2}
Find_Part2=${line:$dash_pos + 1}

以便

  Part1=$Find_Part1  &   Part2=$Find_Part2

像以前一样工作,但它会让我做

 Part1=$Find_Part2   &   Part2=$Find_Part1

必要时。

任何帮助将不胜感激,因为我已经尝试了各种组合的引号、双引号、括号、大括号和反引号,以尝试使其正常工作。约翰

4

2 回答 2

3

将可执行代码存储在变量中比它的价值要麻烦得多。改用函数:

Find_Part1 () {
    printf "%s" "${line:0:$dash_pos -2}"
}

Find_Part2 () {
    printf "%s" "${line:$dash_pos + 1}"
}

Part1=$(Find_Part1)
Part2=$(Find_Part2)

但是,您真正想要的似乎是

while IFS="-" read Part1 Part2; do
   ...
done < file

read命令拆分linePart1Part2

于 2013-11-12T16:00:58.277 回答
0

目前尚不清楚为什么您不能只做问题中的字面意思:

# get the parts
Find_Part1=${line:0:$dash_pos -2}
Find_Part2=${line:$dash_pos + 1}

# ... as necessary:

if such and such condition ; then
   Part1=$Find_Part1
   Part2-$Find_Part2
else
   Part1=$Find_Part2
   Part2=$Find_Part1
fi

Part1此外,您可以在必要时交换和的值Part2,只需要一个临时变量

if interesting condition ; then
    temp=$Part1; Part1=$Part2; Part2=$temp
fi

在 Bash 函数中,我们可能会创建temp一个 local 以避免名称冲突和命名空间混乱:

local temp
于 2013-11-12T16:13:48.410 回答