我的googlefu让我失望了。我有一堆变量,我从CSV中读取它,我想剥离空格。我可以
variable1="$(echo -e "${variable1}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
variable2="$(echo -e "${variable2}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
variable3="$(echo -e "${variable3}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
然后我正在复制并编辑每个变量的变化。在我看来,从其他语言来看,应该有一种方法可以做一个简单的for循环,它适用于变量命名并删除空格,但我无法弄清楚到底是怎么做的。
for $i in variable1 variable2 variable3
do
$i=$(echo -e "${$i}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
done
但据我所知,这不起作用。我想要做的是遍历所有变量,剥离空格,但不必手动输入脚本中的每个变量名称。
答案 0 :(得分:3)
尝试以下方法:
# Sample values that need trimming.
variable1=' a '
variable2=' b c '
variable3=' sadf sdf sdf '
for name in ${!variable*}; do
# Trim leading and trailing whitespace.
read -r $name <<<"${!name}"
# Print result
echo "Variable $name now contains: [${!name}]"
done
该解决方案依赖于variable indirection,能够通过另一个包含目标变量名称的变量来间接引用变量间接。< / p>
请注意,变量间接有其缺陷(参见链接),并且通常有更好的解决方案,例如,通过使用数组。
${!variable*}
扩展为名称以variable
开头的所有已定义变量的名称。${!name}
扩展为名称存储在变量$name
中的变量的值。read -r
,通过读入单个变量,隐式修剪前导和尾随空格。
-r
确保\
个字符。在输入中保持不变,这通常是你想要的。