gpt4 book ai didi

linux - 你如何解释 ${VAR#* :*:*} in Bourne Shell

转载 作者:太空宇宙 更新时间:2023-11-04 09:18:40 25 4
gpt4 key购买 nike

我正在使用 Bourne Shell。需要确认我对以下内容的理解是否正确?

$ echo $SHELL
/bin/bash

$ VAR="NJ:NY:PA" <-- declare an array with semicolon as separator?

$ echo ${VAR#*} <-- show entire array without separator?
NJ:NY:PA

$ echo ${VAR#*:*} <-- show array after first separator?
NY:PA

$ echo ${VAR#*:*:*} <-- show string after two separator
PA

最佳答案

${var#pattern} 是一个 parameter expansion扩展为 $var 的值,并从字符串的前面删除了 pattern 的最短可能匹配项。

因此,${VAR#*:} 删除所有内容,包括第一个 :${VAR#*:*:} 删除直到并包括第二个 : 的所有内容。

问题中给出的扩展末尾的尾随 * 没有任何用处,应该避免:没有任何理由使用 ${var#* :*:*} 而不是 ${var#*:*:} —— 因为它们匹配尽可能少的文本,并且 * 是允许的扩展到 0 个字符,最后的 * 匹配并且不删除任何内容。


如果您真正想要的是一个数组,您可以考虑使用一个真正的数组。

# read contents of string VAR into an array of states
IFS=: read -r -a states <<<"$VAR"
echo "${states[0]}" # will echo NJ
echo "${states[1]}" # will echo NY
echo "${#states[@]}" # count states; will emit 3

...这也使您能够编写:

printf ' - %s\n' "${states[@]}"  # put *all* state names into an argument list

关于linux - 你如何解释 ${VAR#* :*:*} in Bourne Shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44337525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com