我有一个 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)
不能使用+=运算符,因为这会在它们之间添加一个空格。
当我打开一个 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.
我有一条路 "/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它时抛出错误。如何导出目录名称中有空格的路径
数据
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 脚本中增加局部变量?
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 …
我有一个 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) 我创建了一个脚本来在我的 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) 在我使用以下命令后,
pngString="$(cat example.png)"
echo -n "$pngString" > tmp.png
Run Code Online (Sandbox Code Playgroud)
我无法将 tmp.png 作为 PNG 文件打开。当我$pngString用来存储图像文件时,可能会丢失一些信息。
所以问题是:如何在 bash 脚本中使用变量存储完整的图像信息?
我在脚本中看到过这样的结构:
if somevar="$(somecommand 2>/dev/null)"; then
...
fi
Run Code Online (Sandbox Code Playgroud)
这是在某处记录的吗?变量的返回状态是如何确定的,它与命令替换有什么关系?(例如,我会得到相同的结果if echo "$(somecommand 2>/dev/null)"; then吗?)
我正在编写一个脚本,它需要一步计算命令输出中的字符数。
例如,使用该命令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) 兼容。