这是什么意思?
if ${ac_cv_lib_lept_pixCreate+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
Run Code Online (Sandbox Code Playgroud)
看起来ac_cv_lib_lept_pixCreate是一些变量,所以+:意味着什么?
在哪里学习大括号表达式的完整语法?这个语法的名称是什么?
我想重新创建这样的东西
if ( arg1 || arg2 || arg 3) {}
Run Code Online (Sandbox Code Playgroud)
我到目前为止,但我收到以下错误
line 11: [.: command not found
if [ $char == $';' -o $char == $'\\' -o $char == $'\'' ]
then ...
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的方法,但似乎没有人尝试过我试过的一些方法
在bash脚本中
if [ 1 ]
then
echo "Yes"
else
echo "No"
fi
Run Code Online (Sandbox Code Playgroud)
输出: Yes
它表示'1'被视为真值.
但在代码中:
word = Linux
letter = nuxi
if echo "$word" | grep -q "$letter"
then
echo "Yes"
else
echo "No"
fi
Run Code Online (Sandbox Code Playgroud)
输出:没有
但是No会返回1,为什么结果是否
关键字如何echo "$word" | grep -q "$letter"测试命令返回的值后No?
我试图在while循环中获取数组,并且还需要更新数组中的值.
以下是我试过的代码.我收到这个错误[0: command not found
#!/bin/bash
i=0
while [$i -le "{#myarray[@]}" ]
do
echo "Welcome $i times"
i= $(($i+1)))
done
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
我正在编写一个bash脚本,我正在尝试检查是否提供了特定的参数.我注意到一个奇怪的(至少对我而言)[ -n arg ]测试行为.对于以下脚本:
#!/bin/bash
if [ -n $1 ]; then
echo "The 1st argument is of NON ZERO length"
fi
if [ -z $1 ]; then
echo "The 1st argument is of ZERO length"
fi
Run Code Online (Sandbox Code Playgroud)
我得到的结果如下:
没有参数:
xylodev@ubuntu:~$ ./my-bash-script.sh
The 1st argument is of NON ZERO length
The 1st argument is of ZERO length
Run Code Online (Sandbox Code Playgroud)带参数:
xylodev@ubuntu:~$ ./my-bash-script.sh foobar
The 1st argument is of NON ZERO length
Run Code Online (Sandbox Code Playgroud)我已经发现$1用双引号括起来给我的结果符合预期,但我仍然想知道为什么当没有使用引号并且没有参数调用脚本时,两个测试都返回true?它似乎$1是null然后,所以[ -n $1 ] …
我经常.sh在条件 sintaxis 中的文件Shell Script 中找到这样的:
if [ -n "condition" ]; then ...
if [ -z "condition "]; then ...
if [ -x "condition" ]; then ...
if [ -L "condition" ]; then ...
if [ -d "condition" ]; then ...
Run Code Online (Sandbox Code Playgroud)
这些 -n, -z, -x, -L, -d是函数或者它是如何命名的,它的目的是什么?
我对bash编程有点挣扎,因为我似乎不理解语法规则.例如:
read confirm
if [ "$confirm" == "yes" ]; then
echo "Thank you for saying yes"
else
echo "Why did you say no?"
fi
Run Code Online (Sandbox Code Playgroud)
在此代码中,您可以使用许多表单来执行相同的操作:
"$confirm" == "yes"
$confirm == "yes"
"$confirm" == yes
$confirm == yes
Run Code Online (Sandbox Code Playgroud)
那么规则是什么?除此之外,它非常严格,所以如果你在'['和'''之间没有空格的情况下编写上面的if语句,你就会收到错误.所以我的问题是:
此致,
拉菲德
在正确处理文件名时,应该在Bash脚本(没有Perl,Python等等)中使用什么成语来为脚本的参数中的另一个程序构建命令行?
通过正确地说,我的意思是处理带有空格或奇数字符的文件名,而不会无意中导致其他程序将它们作为单独的参数处理(或者,<或者> - 或者- 毕竟,如果不正确的文件名字符被正确转义则有效- 执行某些操作更糟).
这是我的意思的一个组成例子,在一个不能正确处理文件名的形式中:让我们假设这个脚本()通过采取所有的' foo为命令构建命令行(bar假设在路径中)foo输入参数并将任何看起来像标志的东西移到前面,然后调用bar:
#!/bin/bash
# This is clearly wrong
FILES=
FLAGS=
for ARG in "$@"; do
echo "foo: Handling $ARG"
if [ x${ARG:0:1} = "x-" ]; then
# Looks like a flag, add it to the flags string
FLAGS="$FLAGS $ARG"
else
# Looks like a file, add it to the files string
FILES="$FILES …Run Code Online (Sandbox Code Playgroud) 我是 Bash 新手,我发现 Bash 会自动进行分词:
a="1 2 3 4"
Run Code Online (Sandbox Code Playgroud)
如果我用echo $a我得到的回显“a” 1 2 3 4,它就隐式地进行了分词。如果我循环“a”,我分别得到 1、2、3 和 4。
我还从这里读到
shell 扫描未出现在双引号内的参数扩展、命令替换和算术扩展的结果以进行分词。
我还发现如果我有
b=$a;
echo "$b"
Run Code Online (Sandbox Code Playgroud)
我会得到
"1 2 3 4"
Run Code Online (Sandbox Code Playgroud)
所以,这是我的问题:分词什么时候完成?它会改变字符串本身吗?是不是只有使用echoor for(循环)才生效?
更一般地说,bash 如何处理它?
在bash中运行以下命令:
stuff=`rpm -ql <some package> | grep dasdasdfd`
Run Code Online (Sandbox Code Playgroud)
(包中不存在的文件,退出代码= 1,标准输出为空)
if [ -f $stuff ]; then echo "whaaat"; fi
Run Code Online (Sandbox Code Playgroud)
上面的命令检查文件是否存在...但是:
file $stuff
Run Code Online (Sandbox Code Playgroud)
只需打印文件的使用信息......和
stat $stuff
Run Code Online (Sandbox Code Playgroud)
缺少操作数......
有人可以解释一下原因吗?这是一个错误吗?难道我做错了什么?我只是想确保包中的文件出现在fs上
As explained in this answer, the "right" way to check if a variable is set in bash looks like this:
if [ -z ${var+x} ]; then
echo "var is unset"
else
echo "var is set to '$var'"
fi
Run Code Online (Sandbox Code Playgroud)
What I'm interested in is how to extract this into a function that can be reused for different variables.
The best I've been able to do so far is:
is_set() {
local test_start='[ ! -z ${'
local test_end='+x} ]'
local tester=$test_start$1$test_end …Run Code Online (Sandbox Code Playgroud) Bash中这两个选项之间是否有区别:
# 1
if [[ "$VAR" ]]; then
#2
if [[ -n "$VAR" ]]; then
Run Code Online (Sandbox Code Playgroud)
如果没有,是否有真正需要-n选项的情况?