直接在循环中对Bash中的变量进行操作
Operate on variables in Bash directly in a loop
我的 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
但据我所知这不起作用。我想做的是遍历所有变量,去掉空格,但不必在脚本中手动输入每个变量名。
尝试以下操作:
# 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,通过 另一个包含目标的 变量 间接 引用变量的能力变量名。
请注意,变量间接寻址有其缺陷(参见 link)并且通常有更好的解决方案,例如,通过使用数组。
${!variable*}
扩展为名称以 variable
. 开头的所有已定义变量的名称
${!name}
扩展为名称存储在变量 $name
. 中的变量的值
read -r
,通过读入一个 单个 变量,隐式地修剪前导和尾随空格。
-r
确保 \
个字符。输入中的单独保留,这通常是您想要的。
我的 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
但据我所知这不起作用。我想做的是遍历所有变量,去掉空格,但不必在脚本中手动输入每个变量名。
尝试以下操作:
# 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,通过 另一个包含目标的 变量 间接 引用变量的能力变量名。
请注意,变量间接寻址有其缺陷(参见 link)并且通常有更好的解决方案,例如,通过使用数组。
${!variable*}
扩展为名称以variable
. 开头的所有已定义变量的名称
${!name}
扩展为名称存储在变量$name
. 中的变量的值
read -r
,通过读入一个 单个 变量,隐式地修剪前导和尾随空格。-r
确保\
个字符。输入中的单独保留,这通常是您想要的。