相关疑难解决方法(0)

在bash中将命令输出存储到变量时,如何保留换行符?

我在Linux上使用bash shell.我有这个简单的脚本......

#!/bin/bash

TEMP=`sed -n '/'"Starting deployment of"'/,/'"Failed to start context"'/p' "/usr/java/jboss/standalone/log/server.log" | tac | awk '/'"Starting deployment of"'/ {print;exit} 1' | tac`
echo $TEMP
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此脚本时

./temp.sh
Run Code Online (Sandbox Code Playgroud)

所有输出都打印出来没有回车/换行.不知道我将输出存储到$ TEMP的方式,还是echo命令本身.

如何将命令的输出存储到变量并保留换行符/回车符?

linux bash shell

55
推荐指数
2
解决办法
3万
查看次数

如何将目录文件列表存储到数组中?

我正在尝试将文件列表存储到一个数组中,然后再次遍历该数组.下面是我ls -ls从控制台运行命令时得到的内容.

total 40
36 -rwxrwxr-x 1 amit amit 36720 2012-03-31 12:19 1.txt
4 -rwxrwxr-x 1 amit amit  1318 2012-03-31 14:49 2.txt
Run Code Online (Sandbox Code Playgroud)

我写的以下bash脚本将上述数据存储到bash数组中.

i=0
ls -ls | while read line
do
    array[ $i ]="$line"        
    (( i++ ))
done
Run Code Online (Sandbox Code Playgroud)

但是当我echo $array,我什么都没得到!

仅供参考,我这样运行脚本: ./bashscript.sh

bash shell

40
推荐指数
4
解决办法
10万
查看次数

AWS Cloudwatch日志 - 是否可以从中导出现有日志数据?

我已设法使用AWS CloudWatch日志代理将我的应用程序日志推送到AWS Cloudwatch.但ColudWatch Web控制台似乎没有提供允许您从中下载/导出日志数据的按钮.

我有什么想法可以实现这个目标?

amazon-web-services amazon-cloudwatch

38
推荐指数
5
解决办法
3万
查看次数

包含多个参数的变量,在Bash中带引号

我生成一个包含所有args的bash变量,这些args包含空格.当我用这些args启动命令时 - 例如.ls $ args - 引号未正确解释.这是一个示例 - 还创建和擦除所需的文件.

#!/bin/bash
f1="file n1"
f2="file n2"
# create files
touch "$f1" "$f2"
# concatenate arguments
args="\"$f1\" \"$f2\""
# Print arguments, then launch 'ls' command
echo "arguments :" $args
ls $args
# delete files
rm "$f1" "$f2"
Run Code Online (Sandbox Code Playgroud)

有了这个,我对"file,n1","file and n2"有一些"没有这样的文件"错误

variables bash quotes escaping

32
推荐指数
4
解决办法
2万
查看次数

无效字符串:必须使用 Bash 对从 U+0000 到 U+001F 的控制字符进行转义?

我有一个功能,如:

getServers() {
    curl -s -X GET ...
}
Run Code Online (Sandbox Code Playgroud)

输出是一个复杂的 JSON 字符串。我可以像这样解析 JSON:

serverId=$(getServers | jq -r ".[] | select(whatever...)")
echo $serverId
Run Code Online (Sandbox Code Playgroud)

但是如果我将函数调用的输出存储在一个变量中,我会收到一个错误:

servers=$(getServers)
echo $servers | jq .
# jq can not process this
# parse error: Invalid string: control characters from U+0000 through             
echo "$servers" | jq .
# does not work either
Run Code Online (Sandbox Code Playgroud)

U+001F 必须在第 ...

即使我$servers包含与函数调用相同的值,也jq无法处理它。这里发生了什么事?

$ jq --version
jq-1.5


这不是一个重复的问题!这个问题的根源在于\r\n字符串中的存在。添加引号并不能解决问题。

回答

将字符串通过管道输送到tr '\r\n' ' '

servers=$(getServers)
echo $servers …
Run Code Online (Sandbox Code Playgroud)

bash shell jq

27
推荐指数
0
解决办法
1万
查看次数

如何在单引号字符串中使用变量?

我只是想知道如何在单引号内回显变量(我使用单引号,因为字符串中有引号).

     echo 'test text "here_is_some_test_text_$counter" "output"' >> ${FILE}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激

string bash shell echo

25
推荐指数
2
解决办法
4万
查看次数

从多个文件的grep搜索获取最后一行

我在使用grep命令时遇到了一些问题.

我找到了只显示grep搜索的最后一行的方法:

grep PATERN FILE_NAME | tail -1
Run Code Online (Sandbox Code Playgroud)

我还找到了在多个选定文件中进行grep搜索的方法:

find . -name "FILE_NAME" | xargs -I name grep PATERN name
Run Code Online (Sandbox Code Playgroud)

现在我想只得到每个文件的grep结果的最后一行.我试过这个:

 find . -name "FILE_NAME" | xargs -I name grep PATERN name | tail -1
Run Code Online (Sandbox Code Playgroud)

这只返回最后一个文件的最后一个值,我希望每个文件都有最后一个匹配的patern.

unix shell grep

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

检查变量是否为UNIX shell中的数字

如何在UNIX shell中检查变量是否为数字或包含数字?

unix shell

22
推荐指数
4
解决办法
10万
查看次数

在bash中传递空变量

我的问题:

#!/bin/bash

function testFunc(){
    echo "param #1 is :" $1
    echo "param #2 is :" $2
}

param1="param1"
param2="param2"

testFunc $param1 $param2
Run Code Online (Sandbox Code Playgroud)

这样输出是:

param #1 is : param1
param #2 is : param2
Run Code Online (Sandbox Code Playgroud)

但是当我将param1设置为空字符串时:

param1=""
Run Code Online (Sandbox Code Playgroud)

然后输出如下:

param #1 is : param2
param #2 is :
Run Code Online (Sandbox Code Playgroud)

我想问题是当第一个参数为空时,它没有被声明,所以它实际上不会作为函数参数传递.

如果这是问题,那么有没有办法在bash中声明变量"空字符串",或者是否有任何解决方法来获得预期的行为?

注意:如果我调用这样的函数,它按预期工作:

testFunct "" $param2
Run Code Online (Sandbox Code Playgroud)

但我想保持代码清洁.

更新:

我最近发现-u了一个标志,如果即将使用未绑定的变量,它会引发错误.

$ bash -u test.sh
param #1 is : param1
test.sh: line 5: $2: unbound variable
Run Code Online (Sandbox Code Playgroud)

string bash parameter-passing

19
推荐指数
1
解决办法
2万
查看次数

将命令输出重定向到bash中的变量失败

我正在尝试将命令输出重定向到变量:

OUTPUT=$(sudo apache2ctl configtest)
Run Code Online (Sandbox Code Playgroud)

然后阅读它:

echo $OUTPUT
Run Code Online (Sandbox Code Playgroud)

运行时输出如下:

19:19:12 user@user ~ OUTPUT=$(sudo apache2ctl configtest)
Syntax OK
Syntax OK
Run Code Online (Sandbox Code Playgroud)

但变量保持空白.我已经尝试过相同的其他命令,一切正常.

OUTPUT=$(ls -l)
Run Code Online (Sandbox Code Playgroud)

这会将文件列表写入变量,OUTPUT以便以后可以读取.我该怎么做才能让它发挥作用?

linux apache bash shell terminal

18
推荐指数
1
解决办法
5万
查看次数