我的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 $i in variable1 variable2 variable3
do
$i=$(echo -e "${$i}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
done
,但这据我所知。我想做的是循环所有变量,剥离空格,但不必在脚本中手动输入每个变量名称。
尝试以下内容:
# 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
解决方案依赖于变量间接,通过另一个包含目标变量名称的另一个变量 。/p>
请注意,变量间接方面的陷阱(请参阅链接),并且通常会使用阵列,例如,通过使用数组。
-
${!variable*}
扩展到所有定义变量的名称,其名称以variable
开头。 -
${!name}
扩展到存储在变量$name
的变量的值。 -
read -r
,通过阅读变量,隐式修剪领先和尾随的空格。-
-r
确保chars。在输入中是单独的,这通常是您想要的。
-