Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用head和cut定义变量_Bash_Variables - Fatal编程技术网

Bash 使用head和cut定义变量

Bash 使用head和cut定义变量,bash,variables,Bash,Variables,可能是一个简单的问题,我是bash新手,还没有找到问题的解决方案 我正在写以下脚本: for file in `ls *.map`; do ID=${file%.map} convertf -p ${ID}_par #this is a program that I use, no problem NAME=head -n 1 ${ID}.ind | cut -f1 -d":" #Now: This step is the problem: don't seem to be able t

可能是一个简单的问题,我是bash新手,还没有找到问题的解决方案

我正在写以下脚本:

for file in `ls *.map`; do 

ID=${file%.map}

convertf -p ${ID}_par #this is a program that I use, no problem

NAME=head -n 1 ${ID}.ind | cut -f1 -d":" #Now: This step is the problem: don't seem to be able to make a proper NAME function. I just want to take the first column of the first line of the file ${ID}.ind
它给了我回报 第5行:糟糕的替代 有什么帮助吗


谢谢

您的代码中有几个问题:

  • `ls*.map`中文件的
    不符合您的要求。它将失败,例如,如果任何文件名包含空格或
    *
    ,但还有更多。有关详细信息,请参阅

    您只需对*.map
    中的文件使用

  • 所有大写名称通常用于系统变量和内置shell变量。使用小写字母表示您自己的姓名

也就是说

for file in *.map; do 
    id="${file%.map}"
    convertf -p "${id}_par"
    name="$(head -n 1 "${id}.ind" | cut -f1 -d":")"
...

看起来会有用的。我们只需使用
$(cmd)
以字符串形式捕获命令的输出。

您的代码中有几个问题:

  • `ls*.map`中文件的
    不符合您的要求。它将失败,例如,如果任何文件名包含空格或
    *
    ,但还有更多。有关详细信息,请参阅

    您只需对*.map
    中的文件使用

  • 所有大写名称通常用于系统变量和内置shell变量。使用小写字母表示您自己的姓名

也就是说

for file in *.map; do 
    id="${file%.map}"
    convertf -p "${id}_par"
    name="$(head -n 1 "${id}.ind" | cut -f1 -d":")"
...

看起来会有用的。我们只需使用
$(cmd)
以字符串形式捕获命令的输出。

谢谢!事实上,这正是我所需要的。感谢您对小写名称和“ls*.map”的建议,我在一位同事的脚本中看到了它,并对其进行了回收,不知道它有多有用/无用。@PGen如果您可以在不引起冒犯的情况下这样做,请将您的同事指向BashPutfalls条目——循环使用
ls
的输出是一个非常常见的坏主意,并应尽可能地予以消除。顺便说一句,还要注意,最好在循环中添加
[-e“$file”]| | continue
作为第一行,以防没有匹配的文件(在BashPittles讨论中提到了这一点)。@gordondavison或启用同样有效的
nullglob
@melpome,但是您必须小心地关闭它,否则它可能会在以后导致意外的后果(并且它只在
bash
中工作,而不是在其他一些shell中工作)。添加测试行看起来有点笨拙,但在我看来它更健壮。如果文本模式不匹配,我想不出什么时候我会想要它。谢谢!事实上,这正是我所需要的。感谢您对小写名称和“ls*.map”的建议,我在一位同事的脚本中看到了它,并对其进行了回收,不知道它有多有用/无用。@PGen如果您可以在不引起冒犯的情况下这样做,请将您的同事指向BashPutfalls条目——循环使用
ls
的输出是一个非常常见的坏主意,并应尽可能地予以消除。顺便说一句,还要注意,最好在循环中添加
[-e“$file”]| | continue
作为第一行,以防没有匹配的文件(在BashPittles讨论中提到了这一点)。@gordondavison或启用同样有效的
nullglob
@melpome,但是您必须小心地关闭它,否则它可能会在以后导致意外的后果(并且它只在
bash
中工作,而不是在其他一些shell中工作)。添加测试行看起来有点笨重,但在我看来它更健壮。如果文本模式不匹配,我真的想不出什么时候需要它。