Fat*_*rie 1 linux variables bash shell
我有一个包含文本的文件,如下所示:
471_068 0
AALIAN 1
ASHLEY-U 95
CATRIONA_W 97
STESSY K 08
Run Code Online (Sandbox Code Playgroud)
此数据与项目“名称”相关,它是“颜色 ID”,
我需要将名称与 ID 分开并将它们放在单独的变量中。
请注意,使用小于 10 的数字时的 ID 都可以有前导 0 或没有前导,因此我需要在它们出现时对其进行解析(04 需要保留 04,1 需要保留 1 而不是 4 或 01 )
名称中可以包含下划线 (_)、连字符 (-) 或空格 ( ),这些也需要保留。
这是我读取文件的内容,它在循环中逐行读取文件,这很棒,但我不知道如何正确分离我想要的变量。
while read fLine
do
PRDT=$(echo $fLine | tr '\t' '\n')
echo First Var is ${PRDT[0]} - Second Var is ${PRDT[1]}
done < Products
Run Code Online (Sandbox Code Playgroud)
read可以自己做。请参阅BashFAQ #1。
while IFS=$'\t' read -r key value; do
echo "First Var is $key - Remaining Line Contents Are $value"
done
Run Code Online (Sandbox Code Playgroud)
请注意,如果您想丢弃第二列之后的任何内容(而不是将该内容附加到该值),则应改为:
while IFS=$'\t' read -r key value _; do
echo "First Var is $key - Second Var is $value"
done
Run Code Online (Sandbox Code Playgroud)
如果您想以能够按名称查找的方式存储 ID,则关联数组(在 bash 4.0 中添加)是正确的工具:
declare -A color_ids=( )
while IFS=$'\t' read -r key value; do
color_ids[$key]=$value
done
for name in "${!color_ids[@]}"; do
value=${color_ids[$name]}
echo "Stored name $name with value $value"
done
Run Code Online (Sandbox Code Playgroud)