是的,这是可能的,而且有不止一种方法可以做到这一点。您可以对变量使用前缀/后缀扩展语法(例如${var#prefix}
, ${var##prefix}
, ${var%suffix}
, ${var%%suffix}
- 这些删除与指定模式匹配的最短或最长前缀/后缀)。或者您可以用 eg 替换位置参数IFS=, set -- ${var}
(尽管您必须确保首先以某种方式保存其余的原始参数,以便您可以继续循环)。你可以使用数组,如果你的版本bash
足够新(如果它不是很旧......)。这些可能是三种更好的方法,但还有其他方法......
编辑:使用后缀/前缀扩展的一些示例:
for tuple in first_file.xls,1
do
echo ${tuple%,*} # "first_file.xls"
echo ${tuple#*,} # "1"
done
如果您的元组超过 2 元,则该方法会稍微复杂一些;例如:
for tuple in x,y,z
do
first=${tuple%%,*}
rest=${tuple#${first}}
second=${rest%%,*}
last=${rest#*,}
done
在这种情况下,您可能更喜欢@chepner 的回答IFS=, read first second third <<< "${tuple}"
……否则,对于大型元组,簿记可能会变得很麻烦。从元组中设置一个数组也是一种可接受的选择。
不过,对于简单的配对,我倾向于只酌情剥离前缀/后缀......