我在Bash中有一个字符串:
string="My string"
Run Code Online (Sandbox Code Playgroud)
如何测试它是否包含另一个字符串?
if [ $string ?? 'foo' ]; then
echo "It's there!"
fi
Run Code Online (Sandbox Code Playgroud)
??
我的未知运营商在哪里?我是否使用echo grep
?
if echo "$string" | grep 'foo'; then
echo "It's there!"
fi
Run Code Online (Sandbox Code Playgroud)
这看起来有点笨拙.
我把这个字符串存储在一个变量中:
IN="bla@some.com;john@home.com"
Run Code Online (Sandbox Code Playgroud)
现在我想通过;
分隔符拆分字符串,以便我有:
ADDR1="bla@some.com"
ADDR2="john@home.com"
Run Code Online (Sandbox Code Playgroud)
我不一定需要ADDR1
和ADDR2
变量.如果它们是阵列的元素甚至更好.
根据以下答案的建议,我最终得到了以下内容,这就是我所追求的:
#!/usr/bin/env bash
IN="bla@some.com;john@home.com"
mails=$(echo $IN | tr ";" "\n")
for addr in $mails
do
echo "> [$addr]"
done
Run Code Online (Sandbox Code Playgroud)
输出:
> [bla@some.com]
> [john@home.com]
Run Code Online (Sandbox Code Playgroud)
有一个涉及设置Internal_field_separator(IFS)的解决方案;
.我不确定该答案发生了什么,你如何重置IFS
为默认值?
RE:IFS
解决方案,我试过这个并且它可以工作,我保持旧的IFS
然后恢复它:
IN="bla@some.com;john@home.com"
OIFS=$IFS
IFS=';'
mails2=$IN
for x in $mails2
do
echo "> [$x]"
done
IFS=$OIFS
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我试过的时候
mails2=($IN)
Run Code Online (Sandbox Code Playgroud)
我只是在循环打印时得到第一个字符串,没有括号围绕$IN
它工作.
在shell脚本中,我们{}
何时在扩展变量时使用?
例如,我见过以下内容:
var=10 # Declare variable
echo "${var}" # One use of the variable
echo "$var" # Another use of the variable
Run Code Online (Sandbox Code Playgroud)
是否存在显着差异,还是只是风格?一个比另一个更受欢迎吗?
我无法弄清楚如何确保传递给我的脚本的参数是否为数字.
我想做的就是这样:
test *isnumber* $1 && VAR=$1 || echo "need a number"
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
如何获取存储在变量中的字符串的长度并将其分配给另一个变量?
myvar="some string"
echo ${#myvar}
# 11
Run Code Online (Sandbox Code Playgroud)
如何将另一个变量设置为输出11
?
愚蠢的问题毫无疑问,我正在尝试将变量添加到变量的中间,所以例如在PHP中我会这样做:
$mystring = $arg1 . '12' . $arg2 . 'endoffile';
Run Code Online (Sandbox Code Playgroud)
所以输出可能是20121201endoffile
,我如何在linux bash脚本中实现相同的功能呢?
我一直在挖掘mplayer/mencoder和ffmpeg文档,我似乎无法想出任何东西.我对输出格式并不是特别挑剔,因为我可以使用正则表达式将其拉出来,我似乎无法在第一时间获取数据.
我有一个简短的内联python脚本,我从一个bash脚本调用,我想让它处理一个多字变量(来自$*
).我希望这只是工作:
#!/bin/bash
arg="A B C"
python -c "print '"$arg"'"
Run Code Online (Sandbox Code Playgroud)
但它没有:
File "<string>", line 1
print 'A
^
SyntaxError: EOL while scanning string literal
Run Code Online (Sandbox Code Playgroud)
为什么?
我正在尝试使用wget和url从数据库下载文件.例如
wget" http://www.rcsb.org/pdb/files/1BXS.pdb "
所以url的格式是这样的:http://www.rcsb.org/pdb/files/($ idnumber).pdb"
但我有很多文件需要下载; 所以我写了一个bash脚本,从文本文件中读取id_numbers,形成url字符串并通过wget下载.
!/bin/bash
while read line
do
url="http://www.rcsb.org/pdb/files/$line.pdb"
echo -e $url
wget $url
done < id_numbers.txt
Run Code Online (Sandbox Code Playgroud)
但是,url字符串形成为
.pdb://www.rcsb.org/pdb/files/4H80
Run Code Online (Sandbox Code Playgroud)
所以,.pdb
是补充http
.我无法弄清楚为什么.有没有人有想法?我如何格式化它以便url
"http://www.rcsb.org/pdb/files/($idnumber).pdb"
Run Code Online (Sandbox Code Playgroud)
?非常感谢.
注意.这个问题被标记为"如何在bash中连接字符串?"的副本 但我实际上是在寻求别的东西.我在问这个问题之前就已经阅读了这个问题,事实证明我的问题是在Windows中准备txt文件并不是真正的字符串.我编辑了问题标题.我希望现在更清楚了.
bash ×9
shell ×4
string ×3
linux ×2
command-line ×1
curly-braces ×1
ffmpeg ×1
python ×1
resolution ×1
scripting ×1
split ×1
substring ×1
syntax ×1
variables ×1
video ×1