【发布时间】:2022-01-24 21:10:39
【问题描述】:
所以我知道我可以在 read 语句中使用单个 IFS,但是否可以使用两个。例如,如果我有文字
variable = 5 + 1;
print variable;
我有代码将每个单词拆分分配给一个数组,但我也想在; 以及一个空格处拆分,如果它出现的话。
这是目前为止的代码
INPUT="$1"
declare -a raw_parse
while IFS=' ' read -r -a raw_input; do
for raw in "${raw_input[@]}"; do
raw_parse+=("$raw")
done
done < "$INPUT"
结果:
declare -a raw_parse=([0]="variable" [1]="=" [2]="5" [3]="+" [4]="1;" [5]="print" [6]="variable;")
我想要什么:
declare -a raw_parse=([0]="variable" [1]="=" [2]="5" [3]="+" [4]="1" [5]=";" [6]="print" [7]="variable" [8]=";")
【问题讨论】:
-
使用
IFS=' ;'? -
这确实删除了单词末尾的
;,但它并没有将它们保留在数组中,它只是删除了它们,这是我不想要的。 -
您在问题中写道“我也想在 ; 以及空格处分割”。
-
使用 GNU sed 的解决方法:
read -r -a raw_input < <(sed -z 's/;/ ;/g; s/\n/ /g' "$INPUT"); declare -p raw_input -
@Twilight:我现在把它作为答案发布了。