Questions tagged «bash»

与其他Bourne / POSIX shell相对,GNU的Bourne Again SHell特有的问题。对于一般关于Unix shell的问题,请改用/ shell标记。

3
用纯Bash编写程序有多复杂?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 经过一些快速的研究,看来Bash 是图灵完备的语言。 我想知道,为什么Bash几乎专门用于编写相对简单的脚本?由于Bash Shell随Linux一起提供,因此您可以运行Shell脚本,而无需任何其他外部解释器或编译器,这是其他流行的计算机语言所必需的。这是一个巨大的优势,在某些情况下可以弥补语言本身的平庸性。 那么,此类程序的复杂程度是否有限制?纯Bash是否用于编写复杂程序?可以用纯Bash编写文件压缩器/解压缩器吗?编译器?一个简单的视频游戏? 仅仅因为调试工具非常有限而使用稀疏吗?

1
遍历存储在变量中的多行字符串
我读到写这样的东西很不好,for line in $(command)相反,正确的方法似乎是: command | while IFS= read -r line; do echo $line; done 这很好。但是,如果要迭代的是变量的内容而不是命令的直接结果,该怎么办? 例如,假设您创建以下文件quickfox: The quick brown foxjumps\ over - the lazy , dog. 我希望能够做这样的事情: # This is just for the example, # I could of course stream the contents to `read` variable=$(cat quickfox); while IFS= read …
17 bash  read 

2
查找早于15秒但早于2秒的文件
我想查找早于15秒但早于2秒的文件。这是我当前正在使用的脚本,该脚本可捕获15秒以上的文件: find /my/directory -name '*.jpg' -not -newermt '-15 seconds' 任何帮助是极大的赞赏
17 bash  find 

4
如何使用变量作为大小写条件?
我试图使用由具有分离的不同的字符串变量|作为case语句测试。例如: string="\"foo\"|\"bar\"" read choice case $choice in $string) echo "You chose $choice";; *) echo "Bad choice!";; esac 我希望能够输入foo或bar执行case语句的第一部分。然而,无论是foo和bar带我去第二: $ foo.sh foo Bad choice! $ foo.sh bar Bad choice! 使用"$string"而不是$string没有区别。都不会使用string="foo|bar"。 我知道我可以这样: case $choice in "foo"|"bar") echo "You chose $choice";; *) echo "Bad choice!";; esac 我可以想到各种解决方法,但我想知道是否有可能case在bash中将变量用作条件。有可能吗?


3
“ eval”和“ source / dev / stdin”有什么区别?
在以下替代方案之间... 与eval。 comd="ls" eval "$comd" 与 source /dev/stdin printf "ls" | source /dev/stdin 与source /dev/stdin和( )或{ } ( printf "ls" ) | source /dev/stdin { printf "ls"; } | source /dev/stdin (当我们在printf中运行时{ },除了不使用subshel​​l之外,还有什么好处吗?) 它们之间有什么区别? 哪个是首选? 运行命令的首选方法是哪种?()还是{}?


9
一个bash函数像其他语言一样接受参数?
我有一个bash函数来设置$PATH这样- assign-path() { str=$1 # if the $PATH is empty, assign it directly. if [ -z $PATH ]; then PATH=$str; # if the $PATH does not contain the substring, append it with ':'. elif [[ $PATH != *$str* ]]; then PATH=$PATH:$str; fi } 但是问题是,我必须为不同的变量编写不同的函数(例如,为$CLASSPATHlike assign-classpath()等编写另一个函数)。我找不到将参数传递给bash函数的方法,这样我就可以通过引用来访问它。 如果我有类似的东西会更好- assign( bigstr, substr ) …
17 bash  bash-script 

2
如何获得当前的终端名称?
如何获取当前的终端名称? 我的意思ps是TTY列中显示的名称,例如: root@dor-desktop:/home/dor/Documents/LAMP_setup/webs_install/do/install# ps aux | egrep 'mysql|(^USER)' USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND dor 2238 0.2 1.9 448052 79796 ? S 17:27 0:17 gedit /home/dor/Documents/LAMP_setup/webs_install/do/install/mysql.install /home/dor/Documents/LAMP_setup/webs_install/do/install/mysql.setup root 4975 0.1 0.5 324984 22876 ? S 18:12 0:04 gedit /usr/local/mysql/bin/mysqld_safe root 8160 0.0 0.0 4108 664 …
17 bash  terminal 


4
某些子目录的find-command
比方说,我有一个目录dir有三个子目录dir1.. dir3。在内部,我有许多文件和其他子目录。 我想搜索一个带有*.c结尾的文件,但我只想搜索子目录“ dir / dir2”及其所有子目录。我该如何制定呢? 假设我在dir/: find . -name "*.c" 搜索所有目录。 如何限制为dir2?
17 linux  bash  shell  find 

5
BASH关联数组打印
有没有办法在不循环所有元素的情况下打印整个数组([key] = value)? 假设我创建了一个包含一些元素的数组: declare -A array array=([a1]=1 [a2]=2 ... [b1]=bbb ... [f500]=abcdef) 我可以打印出整个阵列 for i in "${!array[@]}" do echo "${i}=${array[$i]}" done 但是,bash似乎已经知道如何一次“获取”所有数组元素-键${!array[@]}和值${array[@]}。 有没有一种方法可以使bash在不循环的情况下打印此信息? 编辑: typeset -p array做到了! 但是我不能一次删除前缀和后缀: a="$(typeset -p array)" b="${a##*(}" c="${b%% )*}" 有没有更干净的方法来获取/打印输出的键=值部分?

2
别名和功能
从bash手册 有关别名的定义和使用的规则有些混乱。在执行该行中的任何命令之前,Bash总是读取至少一行完整的输入。读取命令时将扩展别名,而不是在执行时将别名扩展。因此,与另一条命令在同一行上出现的别名定义在读取下一行输入之前不会生效。该行中别名定义之后的命令不受新别名的影响。执行功能时,此行为也是一个问题。 读取函数定义时会扩展别名,而不是在执行函数时会扩展别名,因为函数定义本身就是复合命令。作为结果, 在函数中定义的别名只有在执行该函数之后才可用。为安全起见,请始终将别名定义放在单独的行上,并且不要在复合命令中使用别名。 似乎两个句子“在读取函数定义时展开别名,而不是在执行函数时展开”和“在函数执行之后才可用的函数中定义的别名”似乎是相反的。 您能分别解释它们的意思吗?
17 bash  alias  function 

2
来源与 为什么会有不同的行为?
我最近了解到 . ./.a.a并且./.a.a是相同的。 但是尝试source source .a.a给出一个错误。IMO,.作为Bash的别名source不应有其他行为,那么我想念的是什么? 奖金,为什么. .可以而source source不能呢?
17 bash 

3
如何在bash中使用正好2个有效数字格式化浮点数?
我想在bash中用正好两个有效数字打印浮点数(也许使用awk,bc,dc,perl等通用工具)。 例子: 76543应打印为76000 0.0076543应打印为0.0076 在这两种情况下,有效数字分别为7和6。对于类似的问题,我已经阅读了一些答案,例如: 如何在shell中四舍五入浮点数? 浮点变量的Bash限制精度 但是答案集中在限制小数位数(例如bc带scale=2或的printf命令%.2f)上,而不是有效位数上。 有没有一种简单的方法可以用2个有效数字来格式化数字,或者我必须编写自己的函数?
17 bash  awk  bc  floating-point  dc 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.