带空格的循环变量分配

费率类型

我收集LPAR名称并在AIX上分配一个变量,然后使用多个命令进行处理。

系统上的LPAR名称为:ABCD56777 TSM Mobile CD CPT 2

for lparname in `lssyscfg -r lpar -m $system -F name,lpar_env |cut -f 1 -d, | sort`;

但是,上面的for循环变量在空格之后并没有获取完整的LPAR值。(确切的LPAR名称是:ABCD56777 TSM Mobile CD CPT 2)

它将LPAR的值分配为单独的ABCD56777。

您能建议我如何分配带空格的变量吗?不幸的是,awk没有安装,只有sed可以工作。

库萨兰达

问题是您的命令替换扩展为以空格分隔的字符串,并且循环将迭代该字符串中的所有单词“单词”是由空格,制表符或换行符分隔的任何内容。

另请注意,在以外的类似Bourne的shell中zsh,这些单词还受到文件名生成(aka globbing)的影响,因此{,除了空格和制表符之外,通配符(在某些shell中)也将成为问题。

lssyscfg -r lpar -m "$system" -F name,lpar_env | cut -d, -f 1 | sort |
while IFS= read -r lpar; do
     echo "$lpar"
done

这使用while循环而不是静态for循环。所述while循环体在子Shell(在执行bash),所以lpar变量不会循环体结束之后存在。如果只在循环主体中使用变量,那不是问题。

相关:了解“ IFS =读-r行”

另一种解决方案是IFS在循环之前将其设置为换行符(并在之后将其重置):

oldIFS=$IFS
IFS=$'\n'    # assumes bash
set -o noglob

for lpar in $( lssyscfg -r lpar -m "$system" -F name,lpar_env | cut -d, -f 1 | sort )
do
    echo "$lpar"
done

set +o noglob
IFS=$oldIFS

默认值$IFS包括空格,这就是为什么您的原始循环遍历错误内容的原因。我还为循环关闭了文件名遍历功能,因为如果返回的文本lssyscfg包含上述文件名遍历模式,我们可能会得到意想不到的结果

最后的变化是恕我直言,非常不雅致,并且完全不适用于产生多行输出的命令。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在shell中为动态命名的变量分配带空格的值

来自分类Dev

输入变量是否带空格?

来自分类Dev

在循环中将光栅带分配给变量名称-“无法分配”错误

来自分类Dev

带变量的for循环回归

来自分类Dev

带多变量的循环

来自分类Dev

在循环内分配变量

来自分类Dev

用于循环和带空格的文件

来自分类Dev

带空格的C ++星号循环程序

来自分类Dev

带多个变量声明的for循环

来自分类Dev

带for循环的顺序变量matlab

来自分类Dev

使用带循环的布尔变量

来自分类Dev

对qmake TARGET变量使用带空格的名称

来自分类Dev

awk传递变量,带空格的文件

来自分类Dev

带空格的 Docker 环境变量

来自分类Dev

使用未分配的变量-for循环

来自分类Dev

for循环中的Python变量分配

来自分类Dev

使用循环创建变量并分配

来自分类Dev

如何使while循环分配变量?

来自分类Dev

Python:在for循环之前分配的变量

来自分类Dev

Shell脚本中变量分配中的空格

来自分类Dev

带2个变量的循环SQL查询

来自分类Dev

带变量的for循环内的sed命令

来自分类Dev

在for循环中重击任意glob模式(带空格)

来自分类Dev

在R markdown中使用带空格的变量名

来自分类Dev

我可以输入只能输入带空格的名称的变量吗?

来自分类Dev

如何在zsh中的变量中调用带空格的脚本?

来自分类Dev

jQuery通过带空格和通过变量的ID查找元素

来自分类Dev

Windows CLI 未显示带空格的正确变量

来自分类Dev

使用 jq 导出带空格的环境变量