我有一个号码12343423455.23353.我想用千位分隔符格式化数字.所以输出就是 12,343,423,455.23353
我正在做一些非常简单的事情:v=5 echo "$v"并期望它打印出来5.但事实并非如此.刚刚设置的值不适用于下一个命令.
我最近了解到 " 在大多数shell中,管道的每个命令都在一个单独的SubShell中执行 ".但是,在这种情况下,两个命令都在同一个子shell中执行.
为什么会这样?有没有办法让这个工作?
完整示例:
$ v=1
$ v=5 echo "$v"
1 # I expected 5!
Run Code Online (Sandbox Code Playgroud) 我正在编写一个脚本来处理20个文件.它们都位于不同的目录中.我有部分文件名.
File1
目录是/data/data1directory/Sample_File1/logs/File1_Data_time.err File2 目录是/data/data2directory/Sample_File2/logs/File2_Data_time.err
.....
我的脚本看起来像这样.(runrunrun.sh)
#!/bin/bash
INPUT=$1
mv /data/*/Sample_*/logs/*_Data_time.err /data/*/Sample_*/logs/*_Data_time_orig.err
cp /data/*/Sample_*/scripts/*.sh /data/*/Sample_*/scripts/*_orig.sh
sh /data/*/Sample_*/scripts/*_orig.sh
Run Code Online (Sandbox Code Playgroud)
在运行时,我试过了.
./runrunrun.sh File1
.runrunrun.sh File1
sh runrunrun.sh File1
mv:无法移动/data/data1directory/Sample_File1/logs/File1_Data_time.err /data/*/Sample_*/logs/*_Data_time_orig.err:没有这样的文件或目录cp也得到类似的反馈
我做得对吗?
谢谢!
如果我理解正确,语法
Var=<something> command
Run Code Online (Sandbox Code Playgroud)
将Var设置为“ something”后,应运行命令。那为什么"A=3; A=4 echo $A"我的bash 会产生3?
a=2
a=3 echo $a #prints 2
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么有人会在第 2 行中使用上述代码。a=3 将被忽略,因为它后面没有“输入”。但是我在上面的脚本中看到了它,但不确定目的。
运行以下代码:
a=one; echo $a
a=two echo $a
a=three echo $a >$a
Run Code Online (Sandbox Code Playgroud)
结果是
一
一
和一个名为"one"且内容为"one"的创建文件
为什么变量没有变为two第2行和three第3行?
使用一个环境变量,它就像:
bash$> foo=1 echo "$foo"
1
Run Code Online (Sandbox Code Playgroud)
[编辑:如下所述,即使这样也行不通,但仅是因为$ foo之前是由其他试验设置的。在两次审判之间应该给“ unset foo”。]
但是,如果需要在启动命令的同一命令行中设置多个环境变量,该怎么办?像这些不起作用:
bash$> foo=1 bar=2 echo "$foo $bar"
1
bash$> foo=1 && bar=2 echo "$foo $bar"
1
bash$> (foo=1;foo=2) && echo "$foo $bar"
1
bash$> (foo=1 && foo=2) && echo "$foo $bar"
1
Run Code Online (Sandbox Code Playgroud)
可能吗?(使用脚本很明显)
我看到了这样的代码:
fqdn='computer1.daveeddy.com'
IFS=. read hostname domain tld <<< "$fqdn"
echo "$hostname is in $domain.$tld"
# => "computer1 is in daveeddy.com"
Run Code Online (Sandbox Code Playgroud)
我认为它有效,因为在第三行中将其IFS分配给.了。
x=100 echo $x
Run Code Online (Sandbox Code Playgroud)
但发现bash不能打印任何内容,而我希望它可以打印100..
而且,我发现x=100 echo $x; echo $xprint什么都没有,而x=100; echo $xprints 100却很混乱。
有人对此有想法吗?