What are the differences between 'bash' and 'sh'

Thread Tools Search this Thread
Top Forums Shell Programming and Scripting What are the differences between 'bash' and 'sh'
# 1  
Old 05-08-2003
What are the differences between 'bash' and 'sh'

Hopefully this doesn't come off as too much of a "newbie" question or a flamebait. But I have recently begun working with a Sun Solaris box after having spent the past five years working with RedHat. From what i can tell, thing look fairly similar and the 'man' command is some help. But I've noticed that the default shell is 'sh' and I tend to be more familiar with 'bash' since that's the default in RedHat. I understand that the reason that 'sh' is the defatul for root is that it's statically compiled and available even if the /usr partition is unavailable. But there are features that I like that seem to be missing:
-Arrow up for command history
-Arrays or creating arrays like this: test1=( `ls` )
-Emacs style editing on the command line
Just to name a few. So my question is, how different is 'sh' from 'bash'. I imagine there are things I will have to rewrite in my bash scripts to get them to work under 'sh'. But how much work am I really in for? Are there any good resources online that will lay out the differences or good books that anyone would recommend? I love the O'Reilly book on Bash. Anything similar for 'sh'? Thanks
# 2  
Old 05-08-2003

This FAQ lists the differences between a few different shells. About half-way down is a comparison of which functions are available/unavailable in the different shells.
# 3  
Old 05-08-2003
In my opinion they are fairly close, but both have commands available to one and not the other, for example substring command is not supported in sh but is in bash ${TEST:$i:1} For arrays, in /sh you use the following syntax

${array} - accesses element 0
${array[i]} accessed element 0 - 1023
${array[*]} and ${array[@]} -uses all elements of the array (list), the difference in the two is that one set is quoted and the other isnt
You can skip the ${ } syntax in sh by using (( array[ ] ))

Personally, I think sh (actually ksh) is better suited for scripting (some may disagree...like I said, just my opinion).

If you want emacs set your EDITOR variable to use emacs. /sh by default uses vi...pretty easy to use once you struggle through the command syntax!!! Use set -o to see what options you have turned on.

To get your history, use ESC-j or ESC-k to scroll up or down. command expansion, hit ESC twice to expand what you are typing on command line. Like bash, you can use / to search your command history.

Plenty other differences Im sure, pick up O'Reilly - UNIX in a Nutshell to see all commands specific to sh.
# 4  
Old 05-08-2003
If you like bash a lot, maybe you should just continue to use it. Solaris 8 includes bash in the full distrubution. And bash precompiled for Sun boxes is available at http://www.sunfreeware.com
# 5  
Old 05-08-2003
google, I am facinated by what you said about setting the EDITOR variable to 'vi'. I tried this but was unable to make use of the ESC-i and ESC-k to peruse the history in 'sh'. I have a feeling I misunderstood something though. (I'm using Solaris 8 BTW) When you mentioned using 'vi', perhaps you weren't talking about editing commands at the 'sh' prompt? Thanks for everyones suggestions.
# 6  
Old 05-08-2003
I am using HPUX 11.xx my shell is by default ksh

To see what options you have turned on, run the following command:
set -o

Output from my system gave me:
sh ---> set -o
Current option settings
allexport on
bgnice on
emacs off
errexit off
gmacs off
ignoreeof off
interactive on
keyword off
markdirs off
monitor on
noexec off
noclobber off
noglob off
nolog off
nounset on
privileged off
restricted off
trackall off
verbose off
vi on
viraw off
xtrace off
sh --->

If vi is not "on", you can turn it on by running the following command:
set -o vi

After that, verify its on by re-running set -o....then try using ESC-j and ESC-k to see command history..On HPUX at least, the command history and line expansion is a function of vi.
# 7  
Old 05-08-2003
A nice difrentiation for the shells.

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

How to remove a file with a leading dash '-' in it's name?

Somehow someone created a file named '-ov' in the root directory. Given the name, the how was probably the result of some cpio command they bozo'ed. I've tried a number of different ways to get rid of it using * and ? wildcards, '\' escape patterns etc.. They all fail with " illegal option --... (3 Replies)
Discussion started by: GSalisbury
3 Replies

2. Email Antispam Techniques and Email Filtering

Procmail recipe: blocking 'unsubscribe and opt-out' messages....

Here is a crude procmail recipe that I quickly created (NOT a procmail recipe expert, btw) that has been catching lots of spam (current second after the charset_spam recipe posted earlier): :0B * .*If.you.do.not.wish.to.receive...* more_spam :0B * You.requested.to.receive.this.mailing... (0 Replies)
Discussion started by: Neo
0 Replies

3. IP Networking


Hey all, I've bought a few bits from Belkin who seem quite happy to support FreeBSD! Last time I bought a UPS from them and it's still going well :D I saw this on their website that the 16bit PCMCIA card was supported under FreeBSD: http://www.belkin.com/network/F5D5020.html I went to my... (0 Replies)
Discussion started by: WIntellect
0 Replies

4. UNIX for Dummies Questions & Answers

quoting echo 'it's friday'

echo 'it's friday' why appear the > (3 Replies)
Discussion started by: yls177
3 Replies

5. UNIX for Dummies Questions & Answers

HELP! The '/var/adm/message' file increase every few seconds???

Hi, guys, I have a big problem. I've got a sun solaris 4.1.4 workstation, and the /var/adm/message file will add one row every few seconds. It becomes a large file in a short time. I wander if there are some mistakes configuring the workstation. the /var/adm/message is as follow: ... (3 Replies)
Discussion started by: cloudsmell
3 Replies

6. Filesystems, Disks and Memory

HELP! The '/var/adm/message' file increase every few seconds???

Hi, guys, I have a big problem. I've got a sun solaris 4.1.4 workstation, and the /var/adm/message file will add one row every few seconds. It soon becomes a large file. I wander if there are some mistakes configuring the workstation. the /var/adm/message is as follow: ... (1 Reply)
Discussion started by: cloudsmell
1 Replies

7. UNIX for Advanced & Expert Users

Terminal 'Local Echo' lost on Modem Dial-out

Can anybody help me? I am developing a utility for automating message paging to a BT alphanumeric pager. I am using a USR 56K Fax-modem connected to /dev/cuab on a Sun Ultra-10. I am using the UNIX 'tip' utility to connect to the modem and I have configured the modem as follows: Baud Rate:... (2 Replies)
Discussion started by: mybeat
2 Replies

8. Shell Programming and Scripting

Clearify what it means under 'WHAT' when hit the 'w'-command

I wonder how I shall read the result below, especially 'what' shown below. The result was shown when I entered 'w'. E.g what is TOP? What is gosh ( what does selmgr mean?)? login@ idle JCPU PCPU what 6:15am 7:04 39 39 TOP 6:34am 6:45 45 45 TOP 6:41am ... (1 Reply)
Discussion started by: Aelgen
1 Replies

9. Programming

i can't use 'make' in my computer?

I need to compile a file,but 'make' does not work.please tell me how to use it or need which tools? (3 Replies)
Discussion started by: dsun5
3 Replies

10. UNIX for Dummies Questions & Answers

How to subtract 2 hours from 'date' in shell ( /bin/sh ) script ?

I write a sh script that zip and copy to tape all files that older then 2 hours. 1. The way I choose is - touch a file with "now - 2 hours", then use fine with '! -newer' 2. Do you have any other idea to do it ? tnx. (1 Reply)
Discussion started by: yairon
1 Replies
Login or Register to Ask a Question

Featured Tech Videos