标签: variable

如何将一些文本附加到makefile中的变量?

我有一个 Makefile。在 makefile 中的某个地方定义了一个变量:

FOO=hello
Run Code Online (Sandbox Code Playgroud)

稍后我需要在FOO的内容中附加一些文本。我是这样试的:

FOO=$(FOO)_world
Run Code Online (Sandbox Code Playgroud)

我建议echo $(FOO)将输出hello_world. 相反,我收到一个错误:

*** Recursive variable 'FOO' references itself (eventually).  Stop.
Run Code Online (Sandbox Code Playgroud)

不能使用+=运算符,因为这会在它们之间添加一个空格。

shell make variable

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

如何扩展波浪号 ~ 作为变量的一部分?

当我打开一个 bash 提示符并输入:

$ set -o xtrace
$ x='~/someDirectory'
+ x='~/someDirectory'
$ echo $x
+ echo '~/someDirectory'
~/someDirectory
Run Code Online (Sandbox Code Playgroud)

我希望上面的第 5 行会出现+ echo /home/myUsername/someDirectory。有没有办法做到这一点?在我的原始 Bash 脚本中,变量 x 实际上是从输入文件中的数据填充的,通过这样的循环:

while IFS= read line
do
    params=($line)
    echo ${params[0]}
done <"./someInputFile.txt"
Run Code Online (Sandbox Code Playgroud)

尽管如此,我得到了类似的结果,echo '~/someDirectory'而不是echo /home/myUsername/someDirectory.

shell bash shell-script quoting variable

16
推荐指数
2
解决办法
7971
查看次数

目录名中带空格的导出路径

我有一条路 "/third/party/city of las vegas"

cd我使用的路径"/third/party/city of las vegas"

.profile文件中,我已将路径导出到一个变量,如下所示

export clv="/third/party/city of las vegas"
Run Code Online (Sandbox Code Playgroud)

当我尝试cd $clv它时抛出错误。如何导出目录名称中有空格的路径

shell filenames quoting variable

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

如何在 Bash 中增加局部变量?

数据

1
\begin{document}
3
Run Code Online (Sandbox Code Playgroud)

代码

#!/bin/bash

function getStart {
        local START="$(awk '/begin\{document\}/{ print NR; exit }' data.tex)"
        echo $START
}

START2=$(getStart)
echo $START2
Run Code Online (Sandbox Code Playgroud)

返回2但我想要3. 我在这个关于如何在 bash 脚本中添加数字的答案中最终更改失败:

START2=$((getStart+1))
Run Code Online (Sandbox Code Playgroud)

如何在 Bash 脚本中增加局部变量?

bash function arithmetic variable

15
推荐指数
1
解决办法
6万
查看次数

How do I shift a bash array at some index in the middle?

1  #!/bin/bash
2  # query2.sh
3
4  numbers=(53 8 12 9 784 69 8 7 1)
5  i=4
6
7  echo ${numbers[@]} # <--- this echoes "53 8 12 9 784 69 8 7 1" to stdout.
8  echo ${numbers[i]} # <--- this echoes "784" to stdout.
9
10 unset numbers[i]
11
12 echo ${numbers[@]} # <--- this echoes "53 8 12 9 69 8 7 1" to stdout.
13 echo ${numbers[i]} # <--- stdout is blank.
Run Code Online (Sandbox Code Playgroud)

Why, in line …

bash array variable

15
推荐指数
2
解决办法
5493
查看次数

为什么来自 heredoc 的 JSON 内容无法解析?

我有一个 JSON 片段。

以下不起作用:

VALUE=<<PERSON
{
  "type": "account",
  "customer_id": "1234",
  "customer_email": "jim@gmail.com"  
}
PERSON
echo -n "$VALUE" | python -m json.tool
Run Code Online (Sandbox Code Playgroud)

结果是:

无法解码 JSON 对象

做同样的事情jq,即

echo -n "$VALUE" | jq '.'
Run Code Online (Sandbox Code Playgroud)

没有输出。

以下行为具有相同的行为:

VALUE=<<PERSON
'{
  "type": "account",
  "customer_id": "1234",
  "customer_email": "jim@gmail.com"  
}'
PERSON
echo -n "$VALUE" | python -m json.tool
Run Code Online (Sandbox Code Playgroud)

回复:

无法解码 JSON 对象

但以下工作:

VALUE='{
  "type": "account",
  "customer_id": "1234",
  "customer_email": "jim@gmail.com"
}'
echo -n "$VALUE" | jq '.'
echo -n "$VALUE" | python -m json.tool
Run Code Online (Sandbox Code Playgroud)

shell here-document variable json

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

如何计算目录中的文件数并在数量超过 5 时删除最旧的文件

我创建了一个脚本来在我的 CentOS 7 服务器上运行自动备份。备份存储到 /home/backup 目录。该脚本有效,但现在我想合并一种在备份发生后计算文件数的方法,如果数量超过 5,则删除最旧的备份。

以下是我的备份脚本。

#!/bin/bash

#mysqldump variables

FILE=/home/backup/databasebk_!`date +"Y-%m-%d_%H:%M"`.sql
DATABASE=database
USER=root
PASS=my password

#backup command process

mysqldump --opt --user=${USER} --password=${PASS} ${DATABASE} > ${FILE}

#zipping the backup file

gzip $FILE

#send message to the user with the results

echo "${FILE}.gz was created:"
ls -l ${FILE}.gz

# This is where I would like to count the number of files 
# in the directory and if there are more than 5 I would like
# to delete the oldest …
Run Code Online (Sandbox Code Playgroud)

shell-script variable

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

如何将图像文件存储在 bash 变量中?

在我使用以下命令后,

pngString="$(cat example.png)"    
echo -n "$pngString" > tmp.png
Run Code Online (Sandbox Code Playgroud)

我无法将 tmp.png 作为 PNG 文件打开。当我$pngString用来存储图像文件时,可能会丢失一些信息。

所以问题是:如何在 bash 脚本中使用变量存储完整的图像信息?

bash binary images cat variable

14
推荐指数
1
解决办法
9300
查看次数

如何确定变量赋值的返回状态?

我在脚本中看到过这样的结构:

if somevar="$(somecommand 2>/dev/null)"; then
...
fi
Run Code Online (Sandbox Code Playgroud)

这是在某处记录的吗?变量的返回状态是如何确定的,它与命令替换有什么关系?(例如,我会得到相同的结果if echo "$(somecommand 2>/dev/null)"; then吗?)

bash command-substitution variable exit-status

14
推荐指数
1
解决办法
3257
查看次数

shell 命令输出中的字符数

我正在编写一个脚本,它需要一步计算命令输出中的字符数。

例如,使用该命令readlink -f /etc/fstab应该返回,10因为该命令的输出长度为 10 个字符。

这已经可以使用以下代码存储变量:

variable="somestring";
echo ${#variable};
# 10
Run Code Online (Sandbox Code Playgroud)

不幸的是,对命令生成的字符串使用相同的公式不起作用:

${#(readlink -f /etc/fstab)};
# bash: ${#(readlink -f /etc/fstab)}: bad substitution
Run Code Online (Sandbox Code Playgroud)

我知道可以通过首先将输出保存到变量来做到这一点:

variable=$(readlink -f /etc/fstab);
echo ${#variable};
Run Code Online (Sandbox Code Playgroud)

但我想删除额外的步骤。

这可能吗?最好仅使用内置或标准实用程序与 Almquist shell (sh) 兼容。

shell string variable

13
推荐指数
3
解决办法
1万
查看次数