相关疑难解决方法(0)

逐行读取文件,将值赋给变量

我有以下.txt文件:

Marco
Paolo
Antonio
Run Code Online (Sandbox Code Playgroud)

我想逐行读取它,并且对于每行我想为变量分配.txt行值.假设我的变量是$name,流程是:

  • 从文件中读取第一行
  • 分配$name="Marco"
  • 做一些任务 $name
  • 从文件中读取第二行
  • 分配$name="保罗"

bash

702
推荐指数
8
解决办法
155万
查看次数

在while循环内修改的变量不会被记住

在下面的程序中,如果我$foo在第一个if语句中将变量设置为值1 ,那么它的作用就是在if语句之后记住它的值.但是,当我将同一个变量设置ifwhile语句内部的值2时,它在while循环之后就被遗忘了.它的行为就像我$foowhile循环中使用某种变量的副本而我只修改那个特定的副本.这是一个完整的测试程序:

#!/bin/bash

set -e
set -u 
foo=0
bar="hello"  
if [[ "$bar" == "hello" ]]
then
    foo=1
    echo "Setting \$foo to 1: $foo"
fi

echo "Variable \$foo after if statement: $foo"   
lines="first line\nsecond line\nthird line" 
echo -e $lines | while read line
do
    if [[ "$line" == "second line" ]]
    then
    foo=2
    echo "Variable \$foo updated to $foo inside if inside while loop"
    fi
    echo "Value …
Run Code Online (Sandbox Code Playgroud)

bash scope sh while-loop

168
推荐指数
3
解决办法
15万
查看次数

如何处理由于grep命令而收到的每一行

运行grep命令后,我从文件中检索了许多行,如下所示:

var=`grep xyz abc.txt`
Run Code Online (Sandbox Code Playgroud)

假设我得到10行,其中包含xyz.

现在我需要处理由于grep命令而得到的每一行.我该如何处理?

bash shell grep

136
推荐指数
4
解决办法
15万
查看次数

IFS = $'\n'的确切含义是什么?

如果以下示例将IFS环境变量设置为换行符...

IFS=$'\n'
Run Code Online (Sandbox Code Playgroud)
  • 什么是美元符号的意思 完全相同
  • 在这个具体案例中它做了什么?
  • 我在哪里可以阅读有关此特定用法的更多信息(Google不允许在搜索中使用特殊字符,否则我不知道该寻找什么)?

我知道IFS环境变量是什么,\n字符是什么(换行),但为什么不使用以下形式:( IFS="\n"哪个不起作用)?

例如,如果我想循环遍历文件的每一行并想要使用for循环,我可以这样做:

for line in (< /path/to/file); do
    echo "Line: $line"
done
Run Code Online (Sandbox Code Playgroud)

但是,除非IFS设置为换行符,否则这将无法正常工作.为了让它工作,我必须这样做:

OLDIFS=$IFS
IFS=$'\n'
for line in (< /path/to/file); do
    echo "Line: $line"
done
IFS=$OLDIFS
Run Code Online (Sandbox Code Playgroud)

注意:我不需要另一种方式做同样的事情,我已经知道很多其他的...我只是对此感到好奇,$'\n'并想知道是否有人可以给我一个解释.

variables bash shell environment-variables ifs

117
推荐指数
4
解决办法
8万
查看次数

无用的猫吗?

这可能是许多常见问题解答 - 而不是使用:

cat file | command
Run Code Online (Sandbox Code Playgroud)

(这被称为无用的猫),正确的方式应该是:

command < file
Run Code Online (Sandbox Code Playgroud)

在第二,"正确"的方式 - 操作系统不必产生额外的过程.
尽管知道这一点,我继续使用无用的猫有两个原因.

  1. 更美观 - 我喜欢数据仅从左到右均匀移动.而且它更容易更换cat别的东西(gzcat,echo,...),添加第二个文件或插入新的过滤器(pv,mbuffer,grep...).

  2. 我"觉得"在某些情况下可能会更快.更快,因为有2个进程,1st(cat)执行读取而第二个执行任何操作.它们可以并行运行,这意味着有时可以更快地执行.

我的逻辑是否正确(第二个原因)?

shell command-line cat

90
推荐指数
8
解决办法
2万
查看次数

在Bash中将命令的输出读入数组

我需要将脚本中的命令输出读入数组.该命令例如是:

ps aux | grep | grep | x 
Run Code Online (Sandbox Code Playgroud)

并且它按行给出输出,如下所示:

10
20
30
Run Code Online (Sandbox Code Playgroud)

我需要将命令输出中的值读入数组,然后如果数组的大小小于3,我将做一些工作.

arrays bash

83
推荐指数
3
解决办法
11万
查看次数

在Bash中从文本文件创建数组

脚本获取URL,解析所需的字段,并将其输出重定向以保存在文件file.txt中.每次找到字段时,输出都会保存在新行中.

file.txt的

A Cat
A Dog
A Mouse 
etc... 
Run Code Online (Sandbox Code Playgroud)

我想file.txt在一个新脚本中从中创建一个数组,其中每一行都是数组中自己的字符串变量.到目前为止,我尝试过:

#!/bin/bash

filename=file.txt
declare -a myArray
myArray=(`cat "$filename"`)

for (( i = 0 ; i < 9 ; i++))
do
  echo "Element [$i]: ${myArray[$i]}"
done
Run Code Online (Sandbox Code Playgroud)

当我运行这个脚本时,空格导致单词被分割而不是获取

期望的输出

Element [0]: A Cat 
Element [1]: A Dog 
etc... 
Run Code Online (Sandbox Code Playgroud)

我最终得到这个:

实际输出

Element [0]: A 
Element [1]: Cat 
Element [2]: A
Element [3]: Dog 
etc... 
Run Code Online (Sandbox Code Playgroud)

如何调整下面的循环,使每行上的整个字符串与数组中的每个变量一一对应?

arrays bash scripting loops variable-assignment

71
推荐指数
5
解决办法
8万
查看次数

如何在Bash中使用read命令?

当我尝试read在Bash中使用这样的命令时:

echo hello | read str
echo $str
Run Code Online (Sandbox Code Playgroud)

什么都没有回应,而我认为str应该包含字符串hello.任何人都可以帮我理解这种行为吗?

bash built-in

53
推荐指数
3
解决办法
10万
查看次数

如何使用shell迭代外部文件中的行?

可能重复:
在Bash中循环浏览文件的内容?

我有一个文件名列表.我需要使用shell脚本从外部文件遍历此文件中的所有名称.我怎样才能做到这一点?

示例文件:

脚本/ names.txt中

alison
barb
charlie
david
Run Code Online (Sandbox Code Playgroud)

脚本/ script.sh

NAMES="" #names from names.txt file
for NAME in $NAMES; do
    echo "$NAME"
done
Run Code Online (Sandbox Code Playgroud)

如何在单独的shell脚本中将names.txt文件分解为数组?

bash shell

29
推荐指数
4
解决办法
12万
查看次数

使用bash脚本读取文件

我需要使用"Do/While"循环读取文件.
如何以字符串形式阅读内容?

这是我的代码:

cat directory/scripts/tv2dbarray.txt | while read line
do
  echo "a line: $line"
done
Run Code Online (Sandbox Code Playgroud)

错误:

test.sh: line 4: syntax error near unexpected token `done'
test.sh: line 4: `done'
Run Code Online (Sandbox Code Playgroud)

bash

23
推荐指数
2
解决办法
6万
查看次数