这里有一位相对新手。 我正在使用以下命令读取文件:
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
必要时。
任何帮助将不胜感激,因为我尝试过引号,双引号,括号, 各种组合的大括号和后面的刻度,试图得到这个 上班。 约翰
答案 0 :(得分: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
命令将line
分为Part1
和Part2
。
答案 1 :(得分: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 temp