我正在尝试为 Minecraft 制作一个 .desktop 文件。执行文件时似乎没有发生任何事情。我尝试按如下方式分配 Exec 键:
Exec= java -jar "~/.minecraft/Minecraft.jar"
Exec= java -jar "$HOME/.minecraft/Minecraft.jar"
但我不确定如何正确输入保留字符(~ 和 $)。根据 Freedesktop 的Desktop Entry Specification:
如果参数包含保留字符,则必须引用该参数。
和
引用必须通过将参数括在双引号之间并在双引号字符、反引号字符 ("`")、美元符号 ("$") 和反斜杠字符 ("\") 之前加上一个额外的反斜杠字符来完成。在扩展域代码和将参数传递给可执行程序之前,实现必须撤消引用。
但这对我来说非常令人困惑。
我想将包含的字符串分配$value给多个变量。
实际上,我之前给出的示例 ( var1=var2=...=$value) 并没有准确反映我想要的内容。到目前为止,我发现了这一点,但它仅适用$value于整数:
$ let varT=varz=var3=$value
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
这个问题是关于将一个变量的全部内容分配给另一个变量。
未使用变量(发送至echo等)
赋值期间没有进行参数扩展。
我的问题也仅与 POSIX shell 有关(此处未使用数组)。
error="You have an error in your input"
newVar="$error"
# vs.
newVar=$error
# ?
# ??This assignment is the question. It doesn't seem that quotes are
# needed here in order to assign the entire contents of $error to
# a new variable.
# ??(But quotes are required when they're used.)
# ?
printf "%s\n" "$error"
# => You have an error in your …Run Code Online (Sandbox Code Playgroud) 这个命令中的空格的解释是什么foo= bar?
为什么foo=bar和foo= bar解释不同
示例(Ubuntu bash)
developer@1604:~$ foo=bar
developer@1604:~$ foo= bar
The program 'bar' is currently not installed. You can install it by typing:
sudo apt install bar
Run Code Online (Sandbox Code Playgroud) 我有一个功能
f(){
echo 777
}
Run Code Online (Sandbox Code Playgroud)
和一个变量,我将函数的“返回值”分配给它。
x=$(f)
Run Code Online (Sandbox Code Playgroud)
非常简洁!然而,在我的实际代码中,变量名和函数名要长得多,而且函数也吃位置参数,所以上面的简洁行变得很长。因为我喜欢保持整洁,所以我想把上面的代码分成两行。
x=\
$(f)
Run Code Online (Sandbox Code Playgroud)
仍然有效!但是:保持整洁也意味着尊重缩进,这样就可以得到类似的东西
if foo
x=\
$(f)
fi
Run Code Online (Sandbox Code Playgroud)
由于空格而不再起作用!有什么好的解决方法吗?
如果我用引号定义一个变量:
TEMP="~/Dropbox"
Run Code Online (Sandbox Code Playgroud)
然后
ls $TEMP
Run Code Online (Sandbox Code Playgroud)
不会工作,而是
echo $TEMP | ls
Run Code Online (Sandbox Code Playgroud)
作品。
为了获得相同的结果,我还可以定义不带引号的变量,例如:
TEMP=~/Dropbox
Run Code Online (Sandbox Code Playgroud)
这样做我可以简单地输入
ls $TEMP
Run Code Online (Sandbox Code Playgroud)
我对它们之间的区别感到很困惑,我想知道我应该在何时何地分别使用这两种定义?
来自https://unix.stackexchange.com/a/32227/674
不使用双引号是安全的主要地方是:
- 在赋值中:(
foo=$bar但请注意,您确实需要export "foo=$bar"在数组赋值中或数组赋值中 使用双引号array=("$a" "$b"));
这是否意味着不需要$bar在赋值中双引号foo=$bar?为什么?
为什么我们需要export "foo=$bar"像这样的数组赋值中的双引号array=("$a" "$b")?
谢谢。
我知道SHELL允许在命令之前立即进行变量赋值,这样IFS=":" read a b c d <<< "$here_string"有效......
我想知道的是,当使用诸如循环之类的复合语句完成时,这样的赋值是否不起作用?我尝试了类似的方法,IFS=":" for i in $PATH; do echo $i; done但导致语法错误。我总是可以做类似的事情oldIFS="$IFS"; IFS=":"; for....; IFS="$oldIFS",但我想知道是否有任何方法可以使此类内联赋值适用于for循环等复合语句?
我用可变主机输入了相同的命令。在第二次我在主机、= 和 $ 之间输入了空格。为什么它试图连接到服务器?另外,当我像 $(host name) 这样写时,我收到错误 Host = not found: 3(NXDOMAIN) centos
所以这个问题已经被问过几次了,但答案似乎对我不起作用。所以我有这个简单的脚本
#!/bin/bash
charon_id = $(pidof charon)
kill -1 $charon_id
Run Code Online (Sandbox Code Playgroud)
控制台说charon_id: command not found*
我尝试了不同的版本,"在$( ),;后面,甚至是$(... 2>&1)我在某处看到的。到目前为止没有任何帮助。建议?
* 从控制台语言翻译成英文
我需要在我的 bash 脚本中设置一个变量
#!/usr/bin/env bash
GITNAME= git config --global user.name
echo " $GITNAME "
Run Code Online (Sandbox Code Playgroud)
但它似乎不是这样工作的。
它是如何工作的?
我有以下脚本,我尝试创建一个空文本文件。我试过touch,我试过echo -n >——他们都失败了。
#!/bin/bash
set filename_result="contents"
echo "filename=$filename_result" # Shows: filename=
rm -f "$filename_result".json
touch $filename_result # Error: usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ...
# Note that `% touch myfile` works fine on the command line
touch -- "$filename_result" # Error: touch: : No such file or directory
echo -n > "$filename_result" # Error: No such file or directory
echo "[" >> "$filename_result"
for file in *json
do
echo "examining file: …Run Code Online (Sandbox Code Playgroud) assignment ×12
bash ×8
quoting ×4
shell ×4
variable ×4
.desktop ×1
for ×1
freedesktop ×1
newlines ×1
posix ×1
shell-script ×1
tilde ×1