History substitution fails when implemented in shell script

The below command works in command line

rsync -avh -r /Source/09_03_2016/ /Destination/
echo $(basename !:3)

Output 09_03_2016

But when I do this in shell script it does not work

#! /bin/bash

/usr/bin/rsync -avh -r /Source/09_03_2016 /Destination/;
echo $(basename !:3)

Output !:3

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Use the following directives in your script:

set -o history
set -o histexpand

This will enable the history expansion which is only enabled for interactive shells by default.

See man bash section HISTORY EXPANSION and SHELL BUILTIN COMMANDS command set for details.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x