直接在循环中直接在bash中操作变量



我的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。在输入中是单独的,这通常是您想要的。

相关内容

  • 没有找到相关文章

最新更新